【发布时间】:2021-10-22 14:32:28
【问题描述】:
输出应该只返回字符串,在字符串中只保留 2 个相同的字母。
示例输入:aaaabbbbaaaa
输出:aabbaa
在这段代码中,我无法在 C 中返回重新创建的字符串。
#include <stdio.h>
#include <string.h>
char *solve(char *s) {
char str[10];
int x = strlen(s);
int j = 0;
for (int i = 0; i < x; i++) {
if (s[i] != s[i + 1]) {
str[j] = s[i];
j++;
continue;
}
if (s[i] == s[i + 2]) {
str[j] = s[i];
j++;
i++;
}
}
return str;
}
int main() {
int t = 1, count = 1;
while (t >= count) {
char arr[10] = "aaabaaaa";
printf("Case #%d: %s\n", count, solve(arr));
count++;
}
}
【问题讨论】:
-
您不能返回指向局部变量的指针。
solve返回后,str不复存在,所以它的地址没有意义。 -
话虽如此,您必须意识到,与其他语言不同,C 中没有真正的字符串类型。阅读 C 教科书中处理字符串的章节。
-
编译时,始终启用警告,然后修复这些警告。 (对于
gcc,最少使用:-Wall -Wextra -Wconversion -pedantic -std=gnu11)注意:其他编译器使用不同的选项来产生相同的结果