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

x0fgdtte  于 2022-12-24  发布在  其他
关注(0)|答案(7)|浏览(180)

我有下面的代码,它获取并打印一个字符串。

#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()函数来计算这个字符串中的字符数呢?

pqwbnv8z

pqwbnv8z1#

对于C++字符串,没有必要使用strlen,只需使用string::length即可:

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

出于以下原因,您应该 * 强烈 * 喜欢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
样式的字符串,并且您想确定在第一个空字符之前出现了多少个字符(这是strlenstring::length不同的一个方面;前者在空终止符处停止,后者计数字符串中的所有字符)。但如果是这种情况,只需使用string::find

size_t index = str.find(0);
if (index == str::npos) index = str.length();
std::cout << index << std::endl;
xfb7svmp

xfb7svmp2#

函数strlen显示\0之前的字符数,将其用于std::string可能会报告错误的长度。

strlen(str.c_str()); // It may return wrong length.

在C++中,字符串可以在字符内包含\0,但C风格的以零结尾的字符串不能包含在末尾。如果std::string在最后一个字符之前包含\0,则strlen报告的长度小于实际长度。
尝试使用.length().size(),我更喜欢第二个,因为另一个标准容器有它。

str.size()
xkrw2x1b

xkrw2x1b3#

使用std::string::sizestd::string::length(两者相同)。
如果您坚持使用strlen,您可以:

int size = strlen( str.c_str() );

注意std::string::c_str的用法,它返回const char*

BUTstrlen计数直到它遇到\0字符,并且std::string可以存储这样的字符。换句话说,strlen有时可能在大小上撒谎。

j1dl9f46

j1dl9f464#

如果您真的、真的想使用strlen(),那么

cout << strlen(str.c_str()) << endl;

另外,.length()的使用更符合C++。

vptzau2j

vptzau2j5#

手动:

int strlen(string s)
{
    int len = 0;

    while (s[len])
        len++;

    return len;
}
2fjabf4q

2fjabf4q6#

#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,这是程序。希望这有帮助!

juzqafwq

juzqafwq7#

只需使用
int len =字符串长度();

相关问题