2015-12-07 3 views
3

Я пытаюсь подсчитать количество символов в строке, предоставленной пользователем. Я знаю, что могу использовать string::length() и string::size(), но когда пространство встречается, счетчик останавливается. Например, скажем, пользователь вводит «Bob Builder», счет должен быть 10, но мой код будет отображаться 3. Также я пытаюсь сделать это без использования массива символов. Какие-либо предложения? Объяснение также очень поможет.Как я могу получить количество символов из строки ввода?

int main() 
    { 
     string Name; 
     cin>>Name; 
     cout << name(Name); 
     return 0; 
    } 

    int name(string a) 
    { 
     int numChar; 
     /*for (int i=0; a[i] != '\0';i++) 
     { 
      if (!isspace(a[i])) 
      numChar++; 
     }*/ 
     numChar=a.length(); 
     return numChar; 
    } 

ответ

2

Вы должны использовать getline() вместо cin, чтобы получить все строки до символа новой строки. cin читает ввод до пробела.

std::getline (std::cin,Name); 

Если вы используете using namespace std;

getline (cin,Name); 

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

#include <algorithm> 
#include <string> 

int main() 
{ 
    std::string s = "Hello there, world!"; 
    std::cout << std::count(s.begin(), s.end(), ' ') << std::endl; 
} 
3

Как узнать, когда ввод окончен? Если вы хотите, чтобы читать до конца строки, то это возможное решение:

std::string line ; 
std::cin.getline(line) ; 
line.length() ; 
+0

Этот код не компилируется. 'std :: cin.getline()' принимает только символ 'char *'. Вы имели в виду 'std :: getline (std :: cin, line)' как другой (правильный) ответ. – Blastfurnace

+0

@Blastfurnace Да, вы правы. – marom

+0

Вы задумывались над исправлением явно неправильного кода в своем ответе? Возможно, как вежливость людям, которые голосовали, не утруждая себя чтением. – Blastfurnace

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