#include<stdio.h> #include<string.h> int f(char* a, int n) { for (int i = 1; i < strlen(a); i++) { int num = 0; while (a[i] != '\0' && a[i] == a[i - 1]) { num++; i++; } if (num >= n-1) { i--; return i; } else if (num > 0) { --i; } } return 0; } int main() { int n; scanf("%d", &n); getchar(); char a[250]; gets_s(a); if (f(a, n)) printf("%s", a[f(a, n)]); else printf("No"); } 这段代码哪里出错了
时间: 2024-04-13 17:30:20 浏览: 44
这段代码有几个问题:
1. 使用 `gets_s()` 函数来读取输入字符串是不安全的,应该使用更安全的函数 `fgets()` 来替代。同时,需要注意输入字符串的长度与数组 `a` 的长度一致。
2. 在 `printf` 语句中,`a[f(a, n)]` 是一个字符而不是字符串。可以使用 `%c` 格式化字符输出,而不是 `%s` 格式化字符串输出。
3. 在 `for` 循环中,使用 `strlen(a)` 作为循环条件会导致在每次循环时都会计算一次字符串长度,建议将其存储在变量中以提高效率。
以下是修改后的代码:
```c
#include<stdio.h>
#include<string.h>
int f(char* a, int n) {
int len = strlen(a);
for (int i = 1; i < len; i++) {
int num = 0;
while (a[i] != '\0' && a[i] == a[i - 1]) {
num++;
i++;
}
if (num >= n - 1) {
i--;
return i;
}
else if (num > 0) {
--i;
}
}
return 0;
}
int main() {
int n;
scanf("%d", &n);
getchar();
char a[250];
fgets(a, sizeof(a), stdin);
if (f(a, n)) {
printf("%c", a[f(a, n)]);
}
else {
printf("No");
}
return 0;
}
```
这样修改后的代码应该能够正常运行了。
阅读全文