12.13  输出字符串的真逆后缀复盘,只差一行代码25分没了

发布于 2024-12-13  74 次阅读


【问题描述】

给定一个字符串(长度不超过20),如ABCA,则ABCA的真逆后缀有:{ A, AC,ACB},依次输出。

【输入形式】

1个字符串

【输出形式】

真逆后缀系列

【样例输入】

AB CD

【样例输出】

D

DC

DC 

DC B


正解:

#include <stdio.h>
#include <string.h>

void suffix(char* str, char a[][20]) {
    str[strcspn(str, "\n")] = 0;
    int start = 0, end = strlen(str) - 1;
    while (start < end) {
        char temp = str[start];
        str[start] = str[end];
        str[end] = temp;
        start++;
        end--;
    }
    int sum = strlen(str) - 1;
    for (int i = 0; i < sum; i++) {
        for (int j = 0; j <= i; j++) {
            a[i][j] = str[j];
            a[i][i + 1] = 0;
        }
    }

}

int main() {
    char str[20];
    char suffixStr[20][20];//存放逆后缀
    int i;
    gets(str);

    //调用函数
    suffix(str, suffixStr);
    for (i = 0; i < strlen(str) - 1; ++i) {
        puts(suffixStr[i]);
    }


    return 0;
}

此题仅让你补充suffix函数内容

 str[strcspn(str, "\n")] = 0;
 int start = 0, end = strlen(str) - 1;
 while (start < end) {
     char temp = str[start];
     str[start] = str[end];
     str[end] = temp;
     start++;
     end--;
 }
 int sum = strlen(str) - 1;
 for (int i = 0; i < sum; i++) {
     for (int j = 0; j <= i; j++) {
         a[i][j] = str[j];
         a[i][i + 1] = 0;
     }
 }

我们先利用反转函数将其倒置,然后依次利用内存循环的a[i][j] = str[j];进行逐字符拷贝

老子就差a[i][i + 1] = 0;这一行代码啊啊啊

他妈的这样拷贝,你还没有对二维指针形参a进行初始化,最后都是少了字符结束符

最后输出的是乱码。。。。

md考试用codeblocks更离谱,他妈的直接什么都不打印


12.14 晚 又写了一次,一次性成功且没有反转str

void suffix(char* str, char a[][20]) {
    str[strcspn(str, "\n")] = 0;
    int len = strlen(str);
    for (int i = 0; i <=len-1; i++) {
        for (int j = 0; j <= i; j++) {
            a[i][j] = str[len - 1 - j];
            a[i][i + 1] = 0;
        }
    }
}

考试时没做出来终究是贪心了啊!

int i从0开始,而不是len-1

一步一步来,桥到船头自然直,哪怕是逆序输出,i从0开始也是自有妙用

届ける言葉を今は育ててる
最后更新于 2024-12-14