#include <stdio.h> #include <stdbool.h> char * longestCommonPrefix(char ** strs, int strsSize){ bool flag = true; char a = **strs; //首字符串首字符 int move = 0; while (flag&&a!='\0') { for(int j=1;j<strsSize;j++){ flag = (a!=*(*(strs+j)+move))?false:true; } if (!flag) { break; } move++; a = *(*strs+move);} //a移动到首字符下一个字符 *(*strs+move) = '\0'; return *strs; } int main(){ char strs = {"flower","flow","flight"}; int size = sizeof(strs); char s = longestCommonPrefix(strs, size); printf("%d\n", s); return 0; } 哪里有问题
时间: 2024-04-12 21:30:42 浏览: 74
在你提供的代码中,有几个问题需要修复:
1. `char strs = {"flower","flow","flight"};` 这里应该使用指针数组来声明 `strs`,而不是单个字符数组。正确的声明方式是 `char *strs[] = {"flower","flow","flight"};`。
2. `int size = sizeof(strs);` 这里的 `sizeof(strs)` 返回的是 `strs` 的大小,而不是字符串数组中的元素个数。你需要手动指定字符串数组的大小,或者使用另一种方式来计算数组大小。
3. `char s = longestCommonPrefix(strs, size);` 这里的 `longestCommonPrefix` 函数返回的是一个指针,而不是单个字符。正确的声明方式是 `char *s = longestCommonPrefix(strs, size);`。
4. `printf("%d\n", s);` 这里应该使用 `%s` 来打印字符串,而不是 `%d`。正确的打印方式是 `printf("%s\n", s);`。
修复后的代码如下:
```c
#include <stdio.h>
#include <stdbool.h>
char * longestCommonPrefix(char ** strs, int strsSize){
bool flag = true;
char a = **strs; //首字符串首字符
int move = 0;
while (flag&&a!='\0')
{
for(int j=1;j<strsSize;j++){
flag = (a!=*(*(strs+j)+move))?false:true;
}
if (!flag)
{
break;
}
move++;
a = *(*strs+move);} //a移动到首字符下一个字符
*(*strs+move) = '\0';
return *strs;
}
int main(){
char *strs[] = {"flower","flow","flight"};
int size = sizeof(strs) / sizeof(strs[0]);
char *s = longestCommonPrefix(strs, size);
printf("%s\n", s);
return 0;
}
```
修复后的代码应该能够正确运行并输出最长公共前缀字符串。
阅读全文