如何使用strlen函数获取字符串的长度

Aka*_*rma 35 c++ string

我有以下代码获取并打印字符串.

#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())原因如下:

  1. 清晰度:(length()size())成员函数明确地给出字符串的长度.虽然可以弄清楚它的strlen(str.c_str())作用,但它会迫使读者暂停一下.

  2. 效率:length()并且size()在时间O(1)中运行,同时strlen(str.c_str())将花费Θ(n)时间来找到字符串的结尾.

  3. 风格:最好将C++版本的函数改为C版本,除非有特定的理由这样做.这就是为什么,例如,它通常被认为是更好地使用std::sortqsortstd::lower_bound以上bsearch,除非一些其他的因素在起作用,将影响性能.

希望这可以帮助!

  • @ AkashSharma-你可以*通过编写`strlen(str.c_str())`在C++字符串上使用`strlen`,但这样的风格非常糟糕.尽管C++吸收了C的标准库,但C++标准库通常包含这些函数的更多C++友好版本,并且当你可以使用`string :: length`时没有理由使用`strlen`. (4认同)
  • @AkashSharma-`strlen`接受`const char*`,`std :: string`不是`const char*`.也就是说 - 在这里使用`strlen`真的不是一个好主意! (4认同)
  • @ AkashSharma-我相信这是历史性的.STL包含使用`size()`,我认为历史上`string`使用`length()`.这可能是为了向后兼容. (3认同)

mas*_*oud 6

函数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)