华为机试 - HJ13 句子逆序

描述

将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”

所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符

数据范围:输入的字符串长度满足 1<=n<=1000

注意本题有多组输入

输入描述:

输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。

输出描述:

得到逆序的句子

示例1

输入:

I am a boy

输出:

boy a am I

示例2

输入:

nowcoder

输出:

nowcoder

解法一(从后往前找空格,找到一个输出一个串):
#include<stdio.h>
#include<string.h>
int main(){
    char str[1024];
    char str1[1025];
    int i,j,l,k;
    gets(str);
    l=strlen(str);
    for(i=0;i<l;i++){
        k=0;
        for(;str[l-i-1]!=' '&&i<l;i++){
            str1[k++]=str[l-i-1];
        }
        for(j=0;j<k;j++){
            printf("%c",str1[k-j-1]);
        }
        printf(" ");
    }
    return 0;
}

解法二(个人比较舒服的解法,先找到空格记录下来,从最后一个空格开始输出每个串):
#include<stdio.h>
#include<string.h>
int main(){
    char s[1024];
    int a[512];
    int i,l,n,t;
    t=0;
    n=1;
    gets(s);
    l=strlen(s);
    a[0]=-1;
    for(i=0;i<l;i++){
        if(s[i]==' '){
            a[n++]=i;
        }
    }
    n--;
    for(i=n;i>=0;i--){
        t=a[i]+1;
        while(s[t]!=' '&&t<l){
            printf("%c",s[t++]);
        }
        printf(" ");
    }
    printf("\n");
    return 0;
}

 

上一篇:chapter5 资源管理系统Yarn


下一篇:基于AM调制解调的无线收发_gnuradio+USRP2920