C ++家庭作业 - 计算单词

时间:2013-03-27 20:08:41

标签: c++ pointers count words

所以我正在创建一个程序,它允许你输入一个句子,程序计算句子中有多少单词。我似乎无法让程序让我输入字符串。我是否需要将指针包含在cin中?

#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;
}

2 个答案:

答案 0 :(得分:1)

使用std::string代替char*。顺便提一下,在实际代码中,指针未初始化为指向任何有效的内存位置。

std::string phrase;
cin >> phrase;

并将其传递给phrase.c_str()等函数。

答案 1 :(得分:1)

问题是你没有为指针分配内存,你甚至没有初始化它。

char* cstring = new char[256];

那应该解决它。

之后你会delete[] cstring;取消分配已分配的内存。


无论如何,这是C ++,所以你应该尽量避免使用char*并使用std::string。性能根本不会有太大变化,在这种情况下,它甚至都不重要。

std::string str;
std::cin >> str;
int numofwords = stringsize(str.c_str());