注意
注意空格,不能单纯依靠空格判定单词个数
注意缩写,缩写可以使用一个flag记录(’)的个数,单词数加上flag即可
问题
输入一行字符,统计其中有多少个单词,单词之间使用空格分隔开输入一行字符,统计其中有多少个单词,单词之间使用空格分隔开
代码
题目要求单词之间使用空格分隔开,所以只能,使用gets函数接纳字符,因为scanf会依据空格将输入的字符分隔开,得不到整个字符
#include <stdio.h>
#include <string.h>
#define max 100
int main(){
char s[max]; //接受字符串
int sum,i=0,n=0,j,a[max],flag=0;//使用a[max]记录每个单词的首字母,flag用个数来记录缩写 ,sum记录单词总个数
printf("请输入一句英语:");
gets(s);
while(s[i]!='\0'){
if(s[i]!=' '){
if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z'))
a[n++] = i; // 记录每个单词首字母位置
while(s[i]!=' '){
//判别左上角逗号 if(s[i] == 39) flag++;
if(s[i] =='\'') flag++;//判别左上角逗号,还可以使用转义字符
i++;
}
}
else i++;
}
sum = flag+n;
printf("共有%d个单词\n",sum);
for(i=0;i<n;i++)
//将每个单词的首字母变为大写
if(s[a[i]]>='a'&&s[a[i]]<='z') s[a[i]] = s[a[i]] - 32;
puts(s);
return 0;
}
改进版
//输入一行字符,统计其中有多少个单词,并将每个单词首字母大写(考虑空格,考虑单词的缩写)
#include "stdio.h"
#include "string.h"
void main() {
char a[20];
char b[20];
gets(a);
int i=0,num=0,flag=0;
while(a[i]!='\0') {
if(a[i]==' '&&a[i+1]!=' ') b[num++]=i+1;
if(a[i]=='\'') flag++;
i++;
}
printf("%d\n",num+flag+1);
if((a[0]>='a')&&(a[0]<='z'))
a[0] = a[0]-32;
for(i=0; i<num; i++)
if((a[b[i]]>='a')&&(a[b[i]]<='z'))
a[b[i]] = a[b[i]]-32;
puts(a);
}