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

时间:2013-11-24 20:55:11

标签: 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;
}

但是如何使用strlen()函数计算此字符串中的字符数?

7 个答案:

答案 0 :(得分:85)

对于C ++字符串,没有理由使用strlen。只需使用string::length

cout << str.length() << endl;

您应强烈首选<{1}},原因如下:

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

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

  3. 样式:最好将C ++版本的函数改为C版本,除非有特定原因,否则这样做。这就是为什么,例如,通常认为使用strlen(str.c_str())优于std::sortqsort而不是std::lower_bound会更好,除非其他一些因素会影响效果。< / p>

  4. 希望这有帮助!

答案 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::sizestd::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();