String.size () возвращает неправильное число, если в строке есть пробел - PullRequest
1 голос
/ 09 декабря 2010

Я пытаюсь написать программу, которая возвращает количество символов в строке.Когда я писал свою программу, я заметил, что в строковом классе есть ошибка.

Скажите, что моя программа такая:

#include <iostream>
#include <string>
using namespace std;

int main()
{
   string input;

   cout << "Input string: ";
   cin >> input

   cout << "Number of characters: " << input.size() << endl;

   return 0;
}

Если мой ввод Test String, я должен видеть число 11 в качестве вывода.

Тем не менее, я получаю следующий вывод:

Number of characters: 4

Кажется, что размер () метод не работает, если в строке есть пробел.

У меня вопрос, есть ли другой способ получить количество символов в строке?Я попытался метод length (), но результат был тот же.

Ответы [ 4 ]

16 голосов
/ 09 декабря 2010

Это потому, что ваш

cin >> input; 

читает только до первого символа пробела.Если вы хотите получить всю строку, используйте следующий код:

std::string s;
std::getline(std::cin, s);
5 голосов
/ 09 декабря 2010

Это не ошибка, и, более конкретно, на самом деле не имеет ничего общего с классом string.

Это имеет отношение к классу istream (cin).Оператор cin >> выполняет «форматированный ввод», то есть ввод, разделенный пробелом.После того, как вы нажали Enter, вы прочитали «Test» в строку, оставив «String» во входном буфере.«Test» на самом деле состоит из четырех символов.

Попробуйте использовать std :: getline или istream :: getline для чтения целых строк ввода с большим количеством элементов управления.Обязательно внимательно прочитайте документацию по этим методам, так как они ведут себя по-разному по отношению к тому, что осталось во входном потоке, что может привести к результатам, которые вы можете не ожидать, если смешать их с oeprator >> using.

4 голосов
/ 09 декабря 2010

Это результат значения cin >> input, которое прекращает чтение при обнаружении любого пробела.Если вы хотите продолжить чтение до конца строки, попробуйте getline.

0 голосов
/ 09 декабря 2017

После правильного ввода вы можете получить длину строки или символьного указателя (char *) (включая пробелы), используя strlen (string_name), это вернет длину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...