0

そこで、文を入力して、その文に含まれる単語の数をカウントするプログラムを作成しています。プログラムに文字列を入力させることができないようです。ポインターを 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;
}
4

2 に答える 2

1

std::stringの代わりに使用しchar*ます。ちなみに、実際のコードでは、ポインタは有効なメモリ位置を指すように初期化されていません。

std::string phrase;
cin >> phrase;

のような関数に渡しますphrase.c_str()

于 2013-03-27T20:10:35.670 に答える
1

問題は、ポインタにメモリを割り当てておらず、初期化さえしていないことです。

char* cstring = new char[256];

それはそれを修正する必要があります。

その後delete[] cstring;、割り当てられたメモリの割り当てを解除します。


いずれにせよ、これは C++ であるため、常に使用を避けchar*て使用するようにしてください。std::stringパフォーマンスはまったく変化しません。この場合、問題にはなりません。

std::string str;
std::cin >> str;
int numofwords = stringsize(str.c_str());
于 2013-03-27T20:10:53.040 に答える