69,373
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<string.h>
#include<locale.h>
#define max 100
int main() {
char a[max];
int i,j,k,len,f;
setlocale(LC_ALL,"chs");
printf("请输入一个英文句子:");
fgets(a,max,stdin);
if ('\n'==a[strlen(a)-1]) a[strlen(a)-1]=0;
len = strlen(a);
j=k=f=0;
for (i=0;i<len;i++) {
if (('A'<=a[i] && a[i] <= 'Z')
||('a'<=a[i] && a[i] <= 'z')) {
j++;
f=1;
} else {
if (f==1) {
k++;
f=0;
}
}
}
if (f==1) k++;
printf("英文句子的字母个数为%d个\n", j);
printf("英文句子的单词个数为%d个\n", k);
return 0;
}
//请输入一个英文句子:_I'm sorry! Very very sorry!!_
//英文句子的字母个数为20个
//英文句子的单词个数为6个
//
#include<stdio.h>
#include<string.h>
#define max 100
int main()
{
char a[max];
int i,j,k,len;
printf("请输入一个英文句子:");
fgets(a, max, stdin);
len = strlen(a);
for(i=0;i<len;i++)
{
if((a[i]>= 'A' && a[i] <= 'Z')||(a[i] >= 'a' && a[i] <= 'z'))
j++;
if(a[i] == ' ')
k++;
}
k++;
printf("英文句子的字母个数为%d个\n", j);
printf("英文句子的单词个数为%d个\n", k);
}
参考一下吧;
第一个问题:不能使用scanf输入一个带有空格的英文句子,因为scanf是格式化输入,遇到空格表示一个格式的输入结束,因此放在a中的单词不会存在空格。
建议改成fgets或者其他能够输入一行的函数。
第二个问题:统计字母时,缺少了边界,比如‘a', 'A', ’z', 'Z'
建议使用库函数isalpha(a[i]);判断字母if((a[i]>'A'&&a[i]<'Z')||(a[i]>'a'&&a[i]<'z'))
改
if((a[i]>='A'&&a[i]<='Z')||(a[i]>='a'&&a[i]<='z'))
还有if(a[i]==' ')应该是if(a[i]==' '),注意空格,并且要注意首个单词前面的空格不能将k自增,如果前面一个已经是空格,那么当前是空格也不能给k自增