我有以下代码获取并打印字符串。
#include<iostream>
#include<conio.h>
#include<string>
using namespace std;
int main()
{
string str;
cout << "Enter a string: ";
getline(cin, str);
cout << str;
getch();
return 0;
}
但是如何使用strlen()
函数计算此字符串中的字符数?
答案 0 :(得分:85)
对于C ++字符串,没有理由使用strlen
。只需使用string::length
:
cout << str.length() << endl;
您应强烈首选<{1}},原因如下:
清晰度:strlen(str.c_str())
(或length()
)成员函数明确地给出了字符串的长度。虽然可以弄清楚size()
的作用,但它会让读者暂停一下。
效率:strlen(str.c_str())
和length()
在时间O(1)中运行,而size()
将花费Θ(n)时间来查找字符串的结尾。
样式:最好将C ++版本的函数改为C版本,除非有特定原因,否则这样做。这就是为什么,例如,通常认为使用strlen(str.c_str())
优于std::sort
或qsort
而不是std::lower_bound
会更好,除非其他一些因素会影响效果。< / p>
希望这有帮助!
答案 1 :(得分:4)
功能strlen
显示\0
之前的字符数,并且std::string
使用该字符可能会报告错误的长度。
strlen(str.c_str()); // It may return wrong length.
在C ++中,字符串可以在字符中包含\0
但C语体零终止的字符串最后不能包含std::string
。如果\0
在最后一个字符前有strlen
,则str.size()
会报告长度小于实际长度。
尝试使用.length()
或.size()
,我更喜欢第二个,因为其他标准容器都有它。
{{1}}
答案 2 :(得分:2)
使用std::string::size
或std::string::length
(两者都相同)。
当您坚持使用strlen
时,您可以:
int size = strlen( str.c_str() );
注意std::string::c_str
的使用情况,返回const char*
。
但是 strlen
计算直到它点击\0
字符,而std::string
可以存储此类字符。换句话说,strlen
有时可以说是大小。
答案 3 :(得分:1)
如果你真的,真的想使用strlen(),那么
cout << strlen(str.c_str()) << endl;
否则使用.length()更符合C ++。
答案 4 :(得分:0)
手动:
int strlen(string s)
{
int len = 0;
while (s[len])
len++;
return len;
}
答案 5 :(得分:0)
#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
int main()
{
char str[80];
int i;
cout<<"\n enter string:";
cin.getline(str,80);
int n=strlen(str);
cout<<"\n lenght is:"<<n;
getch();
return 0;
}
如果你想使用strlen,这是程序。 希望这有帮助!
答案 6 :(得分:-1)
只需使用
int len = str.length();