【问题描述】
给定一个字符串(长度不超过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开始也是自有妙用
Comments NOTHING