C语言统计字符串内单词个数,并把每个单词字母翻转
rt,要求是输入一段英文(有标点),最后统计这句话一共多少个单词并输出数字,第二行输出翻转后的单词(没有标点,每个单词后带空格,句子顺序不变)。我的代码如下:
#include
#include
int main()
{
int i,j,stx;
char a[500];
while(gets(a))
{
int len= strlen(a);
int sum=0;
for(i=0;iif(a[i]==' ')
sum=sum+1;
}
printf("%d\n",sum+1);
int flag=0;
a[len]=' ';
char b[500];
int k=0;
stx=0;
while(stxfor(i=stx;i<=len;i++)
{
if((a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z'))
{
b[k]=a[i];
k++;
continue;
}
if(a[i]==' ')
{
flag++;
break;
}
if(a[i]=='.'||a[i]=='?'||a[i]==','||a[i]=='!')
{
flag++;
continue;
}
}
for(int r=k-1;r>=stx-1;r--)
{
printf("%c",b[r]);
}
stx=stx+flag+k;
}
printf("\n");
}
return 0;
}
现在的问题是我输出的英语单词只有前两个,比如:
I love China.
输出 i evol 就没了。每个标点符号后面也空一个格方便统计单词,求解答。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
int i, j;
char a[500];
while (gets(a))
{
int len = strlen(a);
int sum = 0;
for (i = 0; i < len; i++)
{
if (a[i] == ' ')
sum = sum + 1;
}
printf("%d\n", sum + 1);
char b[500];
int k = 0;
char t;
for (i = 0; i < len; i++) //
{
if ((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z')) //
{
b[k++] = a[i];
}
else if (a[i] == ' ' || ispunct(a[i]))
{
if (k == 0)
continue;
if (ispunct(a[i - 1]))
k--;
for (j = 0; j < k / 2; j++)
{
t = b[j];
b[j] = b[k - j - 1];
b[k - j - 1] = t;
}
b[k] = 0;
printf("%s ", b);
k = b[k] = 0;
}
}
printf("\n");
}
return 0;
}