#include<stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> void reverse(char tmp[100],int k){ int i,j; char t; for(i=0,j=k-1;i<j;i++,j--){ t=tmp[i]; tmp[i]=tmp[j]; tmp[j]=t; } } int main() { int i,j,l,k,flag; char str[1000],tmp[100]; while(scanf("%[^\n]",str)!=EOF){ getchar(); l=strlen(str); k=0; if(str[0]<'a'&&str[0]>'z'&&str[0]<'A'&&str[0]>'Z'){//初始化标志看第一个是不是字母 flag=0; }else{ flag=1; } for(i=0;i<l;i++){ if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z')){ //遇到字母 tmp[k++]=str[i]; //记入tmp flag=1; //标志变为1 }else if(flag==0){ //当前字符为非字母且前面也是非字母,直接输出该字符 printf("%c",str[i]); }else if(flag==1){ //当前字符为非字母且前面是字母 reverse(tmp,k); //反转 for(j=0;j<k;j++){ //输出 printf("%c",tmp[j]); } printf("%c",str[i]); //输出非字母 k=0; //初始化tmp flag=0; //标志变为0 } } if(flag==0){ //最后一个是非字母的话就结束了,而如果是单词的话则还差一个没输出 printf("\n"); }else{ reverse(tmp,k); for(j=0;j<k;j++){ printf("%c",tmp[j]); } printf("\n"); } } return 0; } |
Double click to view unformatted code.