我不断收到细分错误错误,但似乎找不到问题所在。
例如:
输入:4 bbbb
输出:2 abab
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
int a, len, i = 0, count = 0;
scanf("%d", &a);
len = a;
char *strn = malloc((len * sizeof(char*)) + 1);
scanf("%s", strn);
while (i != len) {
if (strn[i]=='a' && strn[i+1]=='a') {
strn[i] = 'b';
count++;
i++;
} else if (strn[i]=='b' && strn[i+1]=='b') {
strn[i] = 'a';
count++;
i++;
} else {
i+=2;
}
}
printf("%d\n%s\n", count, strn);
free(strn);
return 0;
}
答案 0 :(得分:0)
对于初学者来说,这种内存分配方式
char *strn = malloc((len * sizeof(char*)) + 1);
^^^^^^
不正确。
看来你的意思
char *strn = malloc((len * sizeof(char)) + 1);
循环中的条件
while (i != len) {
可以调用未定义的行为,因为由于else语句,变量i
的值可以绕过变量len
中的值
} else {
i+=2;
}
,并使用表达式i + 1
作为索引,因为例如,当i
等于3
时,strn[i + 1]
等于结尾的零'\0'
,并且将执行else语句,该语句将使i
增加2
。
您可以像这样重写while语句
while (i + 1 < len) {