中午好🌞🌞🌞
本答案参考ChatGPT-3.5
这个代码需要修改三个部分来符合题目要求:
-
输入回车键就算另一个单词
-
如果回车键紧跟着的是连字符'-'则不算作新的单词
-
在输入连续多个空格的时候只算一个单词
以下是针对上述三个部分的解决方案:
- 判断回车键后并计数
在原来的代码中,在遇到空格后,将inword变量置为0,表示当前不在一个单词中。在这里,我们可以增加一个判断,若遇到回车键,则认为进入了一个新的单词。
if(inword&&ch==' ')
inword=0;
if((ch == '\n' || ch == '\r') && ch++) //判断回车键并计数
{
inword=1;
new_words++;
}
- 判断连字符后不计数
在原来的代码中,在遇到回车键后,将inword变量置为1,表示当前在一个单词中。在这里,我们可以增加一个判断,若遇到连字符,则将inword变量置为0,表示当前不在一个单词中,不计数。同时,如果连字符后又进入了新的单词,也需要计数。
if((ch == '\n' || ch == '\r') && ch++)
{
if(ch == '-') inword = 0; //判断连字符并不计数
else
{
inword = 1;
new_words++;
}
}
- 在输入连续多个空格的时候只算一个单词
在原来的代码中,在遇到回车键或者空格后,将inword变量置为0,表示当前不在一个单词中。在这里,我们需要增加一个判断,若在空格中,则继续读取后续的空格,直到读到下一个非空格字符。
if(inword&&ch==' ')
{
inword=0;
while((ch=getchar())==' '); //输入连续多个空格只算一个单词
}
综合起来,我们修改后的代码如下所示:
#include<stdio.h>
int main(){
int inword=0;
int new_words=0;
char ch;
printf("Please enter some words to analyzed,use'|' to quit\n");
while((ch=getchar())!='|')
{
if(!inword&&ch!=' ')
{
inword=1;
new_words++;
}
if(inword&&ch==' ')
{
inword=0;
while((ch=getchar())==' '); //输入连续多个空格只算一个单词
}
if((ch == '\n' || ch == '\r') && ch++) //判断回车键并计数
{
if(ch == '-') inword = 0; //判断连字符并不计数
else
{
inword = 1;
new_words++;
}
}
}
printf("words=%d",new_words);
return 0;
}