我已將C++轉換爲c類型的字符串並使用strlen,但它不起作用。Strlen for C++中的字符串
#include<bits/stdc++.h>
using namespace std;
int main(){
string s("Hello");
s.c_str();
cout<<strlen(s);
}
我已將C++轉換爲c類型的字符串並使用strlen,但它不起作用。Strlen for C++中的字符串
#include<bits/stdc++.h>
using namespace std;
int main(){
string s("Hello");
s.c_str();
cout<<strlen(s);
}
s.c_str();
該代碼對s
沒有副作用實際上關於轉換或這樣。您想要進一步處理結果。
而不是
cout<<strlen(s);
你想要麼
cout<<strlen(s.c_str());
或
cout<<s.size();
其中後者的肯定更有效,因爲標準重新對於std::string::size()
需要O(1)的時間複雜度,其中strlen()
不能保證比O(strlen(s))
更好的時間複雜度。
爲什麼使用strlen
當string
類做生意?
請仔細閱讀http://en.cppreference.com/w/cpp/string/basic_string,而不是大小/長度方法
否則,請在@πάνταῥεῖ表明
如果你不想浪費時鐘週期在您的處理器:
cout << strlen(s.c_str());
會請計算s
中的第一個nul字符的每個字符。
如果你只是想知道字符串有多長:
cout << s.length();
或
cout << s.size();
會給你(以及一種算法,是O(1)
而不是strlen
算法,該算法O(n)
- 意思是一百萬個字符長的字符串需要比單個字符串長一百萬倍才能測量長度)。 [當然,如果你有一個std::string
的中間包含一個空字符,你可能會發現其中一個方法是「正確的」,另一個是「錯誤的」,因爲它會給出太長或太短的長度 - a C風格字符串不允許在字符串中間包含空字符,它只允許作爲終止]
調用's.c_str()'不會將'std :: string'轉換爲「c類型字符串」。它返回一個指向保存在'std :: string'中的字符串,你忽略它。所以這個聲明本質上是一個沒有操作的聲明。嘗試:'std :: cout << strlen(s.c_str())'或者更好的是'std :: cout << s.size()' –
這行's.c_str();'什麼也不做。 – crashmstr
這是.....不工作?這是一個非常模糊的錯誤報告。它應該做什麼?它究竟在做什麼? –