编写一个程序,它使用一个
char
数组和循环来读取每一个单词,直到用户输入done
为止。随后,该程序指出用户输入了多少个单词(不包括done
在内)。下面是该程序的运行情况:(粗体表示用户输入)Enter words (to stop,type the word done):
anteater birthday category dumpster
envy finagle geometry done for sure
You entered a total of 7 words您应该在程序中包含头文件
cstring
,并使用函数strcmp()
来进行比较测试。代码如下:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
const int Size = 50;
const char done[] = "done";
char word[Size];
char ch;
char prev = ' ';
int pos = 0;
int indexOfWords = -1;
cout << "Enter words (to stop,type the word done):" << endl;
while (cin.get(ch)) {
// cout << "ch=" << ch << endl;
if (!isalpha(prev) && isalpha(ch)) {
// 如果上一个不是字母,这一个是字母单词开始
pos = 0;
indexOfWords += 1; // done 的时候,也+1了
word[pos] = ch;
pos++;
} else if (isalpha(prev) && isalpha(ch)) {
// 上一个和这一个都是字母,说明单词还没有结束
word[pos] = ch;
pos++;
} else if (isalpha(prev) && !isalpha(ch)) {
// 上一个是字母,这一个不是字母,说明单词结束
word[pos] = '\0';
if (strcmp(word, done) == 0) {
break;
}
// cout << indexOfWords << "\t" << word << endl;
}
prev = ch;
}
cout << "You entered a total of " << (indexOfWords) << " words" << endl;
return 0;
}
- 编写一个满足前一个练习中描述的程序,但使用
string
对象而不是字符数组。请再程序中包含头文件string
,并使用关系运算符来进行比较测试。 - 代码如下:
#include <iostream>
#include <string>
using namespace std;
int main() {
const int Size = 50;
const string done = "done";
string *str = new string;
char word[Size];
char ch;
char prev = ' ';
int pos = 0;
int indexOfWords = -1;
cout << "Enter words (to stop,type the word done):" << endl;
while (cin.get(ch)) {
// cout << "ch=" << ch << endl;
if (!isalpha(prev) && isalpha(ch)) {
// 如果上一个不是字母,这一个是字母单词开始
pos = 0;
indexOfWords += 1; // done 的时候,也+1了
word[pos] = ch;
pos++;
} else if (isalpha(prev) && isalpha(ch)) {
// 上一个和这一个都是字母,说明单词还没有结束
word[pos] = ch;
pos++;
} else if (isalpha(prev) && !isalpha(ch)) {
// 上一个是字母,这一个不是字母,说明单词结束
word[pos] = '\0';
*str = word;
if (*str == done) {
break;
}
// cout << indexOfWords << "\t" << word << endl;
}
prev = ch;
}
cout << "You entered a total of " << (indexOfWords) << " words" << endl;
return 0;
}
ps: 就当前场景而言,string
比较鸡肋。因为判断输入的是不是单词,还是要根据每个字符去判断的。