HJ31 单词倒排

描述

对字符串中的所有单词进行倒排。

说明:
1、构成单词的字符只有26个大写或小写英文字母;
2、非构成单词的字符均视为单词间隔符;
3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
4、每个单词最长20个字母;

数据范围:字符串长度满足 1≤n≤10000
输入描述
输入一行,表示用来倒排的句子

输出描述
输出句子的倒排结果

示例1

输入:
I am a student
输出:
student a am I

示例2

输入:
$bo*y gi!r#l
输出:
l r gi y bo

实现

#include 
#include 
#include 
#include 
#include 

bool isCharNum(char c)
{
    if (((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')))
        return true;
    else
        return false;
}
int main() {
    char c;
    int sLen = 0;
    char s[10001][21] = {0};

    while (1) {
        int ret = scanf("%[^ \n]%c", s[sLen], &c);
        // printf("s: %s, len: %d, c: 0x%02x[0x%02x, 0x%02x], ret: %d\n", s[sLen], sLen, c, ' ', '\n', ret);
        sLen++;
        if (c == '\n') {
            break;
        }
    }

    // for (int i = 0; i < sLen; i++) {
    //     printf("%s ", s[i]);
    // }
    // printf("\n");
    for (int i = 0; i < sLen; i++) {
        int s1Len = strlen(s[i]);
        // printf("s: %s, len: %d\n", s[i], s1Len);
        for (int j = 0; j < s1Len; j++) {
            if (!isCharNum(s[i][j])) {
                s[i][j] = ' ';
            }
        }
        // printf("result = s: %s, len: %d\n", s[i], s1Len);
    }

    // for (int i = 0; i < sLen; i++) {
    //     printf("%s ", s[i]);
    // }
    // printf("\n");

    for (int i = sLen - 1; i >= 0; i--) {
        int s1Len = strlen(s[i]);
        char *pBuf = NULL;
        int m = -1;
        int cnt = 0;
        while ((pBuf = strrchr(s[i], ' ')) != NULL) {
            int curS1Len = strlen(s[i]);
            m = pBuf - s[i];
            // printf("pBuf: 0x%02x[0x%02x]. m = %d[%d]\n", *pBuf, '\0', m, curS1Len);
            if ((m + 1) != curS1Len) {  // 找到的' '不是字符串结尾
                printf("%s ", pBuf + 1);
            }

            m = pBuf - s[i];
            s[i][m] = '\0';  // 将' '换成结束符
            // printf("s: %s, len: %d\n", s[i], strlen(s[i]));
        }
        printf("%s ", s[i]); // 跳出while,说明没有' ',打印最后的字符串
    }
    printf("\n");
}

你可能感兴趣的:(牛客网,-,练习,c++,算法,c语言)