View Code of Problem 114

#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.


Back to problem 114