Подтвердить что ты не робот

Как получить длину строки с помощью функции 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()?

4b9b3361

Ответ 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();