所以我正在创建一个程序,它允许你输入一个句子,程序计算句子中有多少单词。我似乎无法让程序让我输入字符串。我是否需要将指针包含在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;
}
答案 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());