我有以下代码获取并打印字符串.
#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;
}
Run Code Online (Sandbox Code Playgroud)
但是如何使用strlen()
函数计算此字符串中的字符数?
tem*_*def 99
对于C++字符串,没有理由使用strlen
.只需使用string::length
:
cout << str.length() << endl;
Run Code Online (Sandbox Code Playgroud)
您应该非常喜欢这个,strlen(str.c_str())
原因如下:
清晰度:(length()
或size()
)成员函数明确地给出字符串的长度.虽然可以弄清楚它的strlen(str.c_str())
作用,但它会迫使读者暂停一下.
效率:length()
并且size()
在时间O(1)中运行,同时strlen(str.c_str())
将花费Θ(n)时间来找到字符串的结尾.
风格:最好将C++版本的函数改为C版本,除非有特定的理由这样做.这就是为什么,例如,它通常被认为是更好地使用std::sort
过qsort
或std::lower_bound
以上bsearch
,除非一些其他的因素在起作用,将影响性能.
希望这可以帮助!
函数strlen
显示之前的字符数,\0
并将其用于std::string
可能报告错误的长度。
strlen(str.c_str()); // It may return wrong length.
Run Code Online (Sandbox Code Playgroud)
在C ++中,字符串可以包含\0
在字符中,但是C样式零终止字符串不能但必须位于末尾。如果std::string
有\0
,则最后一个字符之前strlen
报告的长度小于实际的长度。
尝试使用.length()
或.size()
,我更喜欢第二个,因为另一个标准容器也有它。
str.size()
Run Code Online (Sandbox Code Playgroud)