2015-10-07 82 views
-5

這段代碼錯在哪裏? 它不會讓我投strlen(s)int,我可以重複它,直到i等於字符串的長度。strlen to int C++ - 爲什麼我不能這樣做?

#include <iostream> 
#include <string.h> 
#include <string> 

using namespace std; 

int main() 
{ 

    string s; 
    cin >> s; 

    for (int i = 0; int n = (int)strlen(s); i < n, i++) 
    { 
     cout << s[i] << endl; 
    } 
} 
+0

使用's.size()''strlen'爲'char'陣列字符串。 – 101010

+0

我必須更改頭文件嗎? –

+1

你只需要#include '#include ' – 101010

回答

0

因爲strlen期望得到一個char const*,因爲它的參數。您應該使用s.size()而不是sstd::string

此外,你應該不應該計算strlen像這樣的循環由於性能問題(另一方面s.size應該能夠在O(1)時間內完成,所以它會好的)。

然後還有一些其他的問題,你的程序,已經在一行。您不能使用#include //iostream包含文件,而應該使用#include <iostream>

其次,你不能在for循環的條件中聲明一個變量,你可能不應該分配而不是比較(一個等號是而不是與2相同)。你應該寫下for(int i = 0; i != s.size(); i++)

第三,你不應該在for結構的更新表達式中進行檢查。那裏的東西只會被評估爲更新循環變量等,真實值將被忽略。

總的來說,我認爲你應該拿起介紹C++的書或在網上找到一個很好的教程。你的代碼只需要很多問題就可以得出結論,即你已經學會了最基本的C++。

+0

我正在學習CS50,而不是C++。我被迫在C++中學習CS50的工作方式,因爲我無法運行虛擬計算機,但謝謝。 –

+0

// ... //因爲它看起來不像在後文章中會顯示#include

+1

@LouisGermanotta在這種情況下,看起來你必須學習C++作爲課程的一部分或必備條件,在最基本的... – skyking

3

問題不是strlen的結果不能轉換爲int,而是strlen不能用於std::string

strlen爲「C字符串」,字符的零封端的陣列。

std::string具有size成員函數:

int main() 
{ 
    string s; 
    cin >> s; 
    for (int i = 0; i < s.size(); i++) 
    { 
     cout << s[i] << endl; 
    } 
} 

有C頭<string.h>應用於std::string內什麼。
reference可以是有用的。

+0

如果你想編譯時沒有警告,它應該是'size_t i'。 –

0

strlenchar陣列。

std::string有一個名爲sizelength的成員函數。

如果您仍想使用strlen,可以撥打c_str並將返回的字符串傳遞給strlen

std::size_t length = s.size(); 
for (int i = 0; i < length; ++i) 

也可以遍歷std::string的元素:

for (std::string::iterator itr = s.begin(); itr != s.end(); ++itr) 
{ 
    std::cout << *itr << std::endl; 
}