我有下面的代码,它获取并打印一个字符串。
#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()
函数来计算这个字符串中的字符数呢?
7条答案
按热度按时间pqwbnv8z1#
对于C++字符串,没有必要使用
strlen
,只需使用string::length
即可:出于以下原因,您应该 * 强烈 * 喜欢
strlen(str.c_str())
:1.澄清度:
length()
(或size()
)成员函数明确给予字符串的长度,虽然可以弄清楚strlen(str.c_str())
的作用,但它迫使读取器暂停一段时间。1.效率:
length()
和size()
在时间O(1)内运行,而strlen(str.c_str())
将花费Θ(n)时间来找到字符串的结尾。1.样式:比起C版本的函数,更喜欢C版本的函数是件好事,除非有特殊的原因,这就是为什么,例如,通常认为使用
std::sort
比使用qsort
更好,或者使用std::lower_bound
比使用bsearch
更好,除非有其他因素影响性能。我能想到
strlen
在什么地方有用的唯一原因是,如果您有一个嵌入了空字符的C样式的字符串,并且您想确定在第一个空字符之前出现了多少个字符(这是strlen
与string::length
不同的一个方面;前者在空终止符处停止,后者计数字符串中的所有字符)。但如果是这种情况,只需使用string::find
:xfb7svmp2#
函数
strlen
显示\0
之前的字符数,将其用于std::string
可能会报告错误的长度。在C++中,字符串可以在字符内包含
\0
,但C风格的以零结尾的字符串不能包含在末尾。如果std::string
在最后一个字符之前包含\0
,则strlen
报告的长度小于实际长度。尝试使用
.length()
或.size()
,我更喜欢第二个,因为另一个标准容器有它。xkrw2x1b3#
使用
std::string::size
或std::string::length
(两者相同)。如果您坚持使用
strlen
,您可以:注意
std::string::c_str
的用法,它返回const char*
。BUT
strlen
计数直到它遇到\0
字符,并且std::string
可以存储这样的字符。换句话说,strlen
有时可能在大小上撒谎。j1dl9f464#
如果您真的、真的想使用strlen(),那么
另外,.length()的使用更符合C++。
vptzau2j5#
手动:
2fjabf4q6#
如果你想使用strlen,这是程序。希望这有帮助!
juzqafwq7#
只需使用
int len =字符串长度();