Как получить длину строки с помощью функции strlen
У меня есть следующий код, который получает и печатает строку.
#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()
?
Ответы
Ответ 1
Для строк С++ нет причин использовать strlen
. Просто используйте string::length
:
cout << str.length() << endl;
Вам следует отдать предпочтение strlen(str.c_str())
по следующим причинам:
-
Ясность: функции члена length()
(или size()
) однозначно возвращают длину строки. Хотя возможно выяснить, что делает strlen(str.c_str())
, это заставляет читателя немного приостанавливаться.
-
Эффективность: length()
и size()
выполняется во времени O (1), а strlen(str.c_str())
возьмет & Theta; (n) время, чтобы найти конец строки.
-
Стиль: Хорошо предпочесть версии функций С++ для версий C, если нет особых причин делать это иначе. Вот почему, например, обычно лучше использовать std::sort
над qsort
или std::lower_bound
над bsearch
, если в игру не входят другие факторы, которые влияют на производительность.
Надеюсь, это поможет!
Ответ 2
Функция strlen
показывает количество символов до \0
и использование его для std::string
может сообщать неправильную длину.
strlen(str.c_str()); // It may return wrong length.
В С++ строка может содержать \0
внутри символов, но строки с завершением в стиле C не могут не быть в конце. Если std::string
имеет \0
перед последним символом, тогда strlen
сообщает длину, меньшую, чем фактическая длина.
Попробуйте использовать .length()
или .size()
, Я предпочитаю второй вариант, поскольку у него есть другие стандартные контейнеры.
str.size()
Ответ 3
Используйте std::string::size
или std::string::length
(оба одинаковые).
Как вы настаиваете на использовании strlen
, вы можете:
int size = strlen( str.c_str() );
Обратите внимание на использование std::string::c_str
, которое возвращает const char*
.
НО strlen
рассчитывается до тех пор, пока он не достигнет \0
char и std::string
может хранить такие символы. Другими словами, strlen
может иногда лежать для размера.
Ответ 4
Если вы действительно хотите использовать strlen(), то
cout << strlen(str.c_str()) << endl;
иначе использование .length() больше соответствует С++.
Ответ 5
Вручную:
int strlen(string s)
{
int len = 0;
while (s[len])
len++;
return len;
}
Ответ 6
#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.
Надеюсь, это поможет!
Ответ 7
Просто используйте
int len = str.length();