2013-09-16 3 views
0

Это то, что я пытаюсь сделать, это не почти вся программа, которую я делаю всего лишь небольшую часть. Эта часть подсчитывает # слов того, что я ввожу.Подсчет слов в строке

string s; 
getline(cin, s); 

for (unsigned int i = 0; i < s.length(); i++) 
{ 
    if (s[i] == ' ' || s[i] == '.') 
    { 
     numWords++; 
    } 
} 

Это, очевидно, работает, если кто-то вводит правильную линию с периодом в конце. Я не могу придумать, как заставить его распознать символ конца строки, хотя они не ставят период.

+0

Как насчет новой строки - \ n символ? Кроме того, я уверен, что есть стандартные функции обработки ввода (для меня это было для меня с C++ или C# и т. Д.) Для обработки новых строк. И, наконец, период является страшным означающим для конца строки, например, что, если вход содержал два предложения? – Ross

+0

, который, однако, не учитывает последнее слово. если я буду вводить «привет», он скажет мне 0 слов – diggindog

+0

Nah Я хочу знать общее количество слов на входе. – diggindog

ответ

0

Почему бы не просто запустить счетчик numWords на 1 и считать только пробелы?

+0

Потому что если я ничего не введу, он скажет, что есть 1 слово. – diggindog

+0

Посмотрите это на взрыв строки: http://stackoverflow.com/questions/8448176/split-a-string-into-an-array-in-c вы можете использовать это, чтобы взорвать слова, а затем проверить размер массива. – Ross

0

Вы можете просто подсчитать количество «» в своей строке и добавить это к 1. Это все.

0
bool previousSpace = false; 
    for (unsigned int i = 0; i < s.length(); i++) 
    { 
    if (isspace(s[i]) || s[i] == '.') 
    { 
     if (previousSpace == false) 
     { 
      numWords++; 
      previousSpace = true; 
     } 
    } 
    else 
    { 
     previousSpace = false; 
    } 
    } 
    cout << numWords + (previousSpace ? 0 : 1) << endl; 

Это рассматривает более чем одно последовательное пространство. Ключевым моментом здесь является использование функции isspace.

Смежные вопросы