2013-03-27 3 views
0

Итак, я делаю программу, в которой он позволяет вводить предложение, и программа подсчитывает, сколько слов есть в предложении. Кажется, я не могу заставить программу ввести строку. Нужно ли включать указатель в cin?C++ Homework - Подсчет слов

#include <cstring> 
#include <string> 
#include <iostream> 

int stringsize(char*); 
using namespace std; 

int main() 
{ 
    char* cstring; //pointer 
    cout << " Please enter phrase to count number of words: "; 
    cin.get(cstring); 
    int numofwords; 
    numofwords = stringsize(cstring); 
    cout << numofwords << endl; 
    system("pause"); 

    return 0; 
} 

int stringsize(char* cstr) 
{ 
    int pos,sizeofstr; 
    sizeofstr = 0; 
    string copy; 
    string cplusstr(cstr); 
    while ((pos = cplusstr.find(' ')) != -1) 
    { 
     pos = cplusstr.find(' '); 
     copy.assign(cplusstr,0,pos); 
     cplusstr.erase(0,pos+1); 
     copy.erase(0,pos); 
     sizeofstr = sizeofstr + 1; 
    } 
    int length = cplusstr.size(); 
    char* cstring = new char[length + 1]; 
    strcpy(cstring,cplusstr.c_str()); 
    if(cstring != NULL) //no whitespace left but there is still a word 
    { 
     sizeofstr = sizeofstr + 1; 
    } 
    return sizeofstr; 
} 
+1

Что вы подразумеваете под 'I can not, чтобы получить программу, чтобы я мог ввести строку.'? Что происходит, когда вы пытаетесь дать ему вход? –

+0

Возможный дубликат функции [C++ для подсчета всех слов в строке] (http://stackoverflow.com/questions/3672234/c-function-to-count-all-the-words-in-a-string) –

ответ

1

Использование std::string вместо char*. Кстати, в вашем фактическом коде указатель не инициализирован, чтобы указывать на любые допустимые ячейки памяти.

std::string phrase; 
cin >> phrase; 

И передать его функции, как phrase.c_str().

1

Проблема в том, что вы не выделяете память для указателя, и вы даже не инициализируете его.

char* cstring = new char[256]; 

Это должно исправить это.

Впоследствии вы должны были бы delete[] cstring; освободить выделенную память.


Во всяком случае, это C++, так что вы должны стараться избегать char* и использовать std::string во все времена. Производительность совсем не изменится, и в этом случае это даже не имеет значения.

std::string str; 
std::cin >> str; 
int numofwords = stringsize(str.c_str()); 
Смежные вопросы