算法打卡day10-句子逆序

158 阅读1分钟

描述

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

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

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

注意本题有多组输入

输入描述:

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

输出描述:

得到逆序的句子

示例1

输入:

I am a boy

复制

输出:

boy a am I

复制

示例2

输入:

nowcoder

复制

输出:

nowcoder

复制

思路

设置字符串数组存储输入的句子,从最后一个元素开始遍历数组,遇到空格时停止并输出空格前的单词,设置变量j存储此时的位置,由于第一个字母前没有空格,为了能够第一个单词,循环的条件和if语句判断条件设置为i>=-1

代码实现

#include <stdio.h>
#include <string.h>
int main() {
    char str[1000] = {0};
    gets(str);
    int i, j = strlen(str), k, m;
    for (i = strlen(str) - 1; i >= -1; i--) {
        if ((str[i] == ' ')||(i==-1)) {
            for (k = i + 1; k < j; k++)
                printf("%c", str[k]);
            j = i;
            printf(" ");
        }
    }
    return 0;
}

小结

一开始时犯了低级错误,将gets(str)放在了设置int型变量的语句后面导致了没有输出,然后没能输出第一个单词,忽略了第一个单词前没有空格这一特殊情况,将退出循环的条件设置为i>=-1并增设了if语句的判断条件之后顺利输出结果。