2017-10-13 110 views
-1

我從字面上剛剛開始學習C++,我有一個Java的基本知識,我只是在嘗試基礎知識。我正在嘗試做一個非常基本的程序來理解這種語言的語法。如何在C++中的函數中組合字符串和字符串大小?

#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
    string bacon = "How many characters are in the following? "; 
    string chedder = "icecream"; 
    string cheSize = chedder.size(); 
    string snow = bacon + " " + "\"" + chedder + "\"" + "The number is : " + cheSize; 

    cout << snow; 
    return 0; 
} 

我在做什麼錯?

而且,我注意到COUT着合併多個字符串,例如

cout << snow + chedder; 

不起作用。

這是什麼原因?感謝您的時間!

+2

'string cheSize = chedder.size();'size returns int not string。 – Raindrop7

+0

在使用東西之前,[閱讀着名的手冊](http://en.cppreference.com/w/cpp/string/basic_string)怎麼樣? – user0042

+1

你不能通過做隨機的東西來學習C++,並要求stackoverflow爲什麼不起作用。 –

回答

1

chedder.size() 

有整型std::string::size_type的表達。類std::string中沒有可以隱式地將整數轉換爲std::string類型的對象的轉換構造函數。

所以這種說法

string cheSize = chedder.size(); 

是錯誤的。

由於這個原因,對於std::string類型的對象和整數,沒有超載的operator +。相反,您應該使用標準功能std::to_string將整數轉換爲字符串並應用operator +

因此,而不是使用下面的代碼

string bacon = "How many characters are in the following? "; 
string chedder = "icecream"; 
string::size_type cheSize = chedder.size(); 
string snow = bacon + " " + "\"" + chedder + "\"" + "The number is : " + to_string(cheSize); 

cout << snow << endl; 

而且這種說法

cout << snow + chedder; 

是正確的前提是兩個變量有類型的std :: string或其中一人有性病類型: :字符串和其他類型的字符數組或指向char的指針。

0

你可能想:

cout << snow << " " << chedder; 

還要注意的是,chedder.size();回報你一個整數,而不是字符串。

1

size()返回一個整數類型(std::string::size_type是特異性的),而不是string。與其他一些語言不同,C++在分配給字符串變量時不會自動將整數轉換爲string

如果您使用的是C++ 11或更新版本,則可以使用to_string()方法對其進行轉換。

string cheSize = chedder.size().to_string(); 
+0

['std :: string :: size()'](http://en.cppreference.com/w/cpp/string/basic_string/size)返回'std :: string :: size_type'是精確的! – user0042

0

您不能爲字符串對象分配一個整數值。

std::string cheSize = chedder.size(); // error 

如果你想,那麼你可以使用std::to_string

std::string cheSize = std::to_string(chedder.size()); 
相關問題