C语言中求字符串公共前缀

刚学C,各位帮我看看哪里出现问题了,要求输出公共字符串,我的没有输出。看了半天没看出问题在哪?自己好菜。


#include
int main(){
    int n,num=0,k=0,t=0;
    char a[60][30];
    scanf("%d",&n);
    while(num!=n){
        scanf("%s",a[num]); 
        num++;
    }
    for(int i=0;i-1;i++){
        k=k+a[i][0]-a[i+1][0];    
        }
        if(k!=0)printf(" ");
    for(int j=0;j<30;j++){
        for(int i=0;i1][j];
        }
        if(t==0){
            printf("%c",a[0][j]);
        }else{
        break;
    }
    return 0;
}
}

第一个循环中的 while(num!=n) 应该是 while(num<n),因为你需要读入 n 个字符串。
第二个循环中的 for(int i=0;i<num-1;i++) 应该是 for(int i=0;i<n-1;i++),因为你需要比较 n-1 对相邻的字符串。
在第二个循环中, t 在每次比较时都应该被重置为0,以免影响后面的比较。
最后一个循环应该放在第二个循环的外面,以便在找到公共字符串后输出它。

#include <cstdio>

int main() {
    int n, num = 0, k = 0, t = 0;
    char a[60][30];
    scanf("%d", &n);
    while (num < n) {
        scanf("%s", a[num]);
        num++;
    }
    for (int i = 0; i < n - 1; i++) {
        k = k + a[i][0] - a[i + 1][0];
    }
    if (k != 0) {
        printf(" ");
    }
    for (int j = 0; j < 30; j++) {
        t = 0;
        for (int i = 0; i < n - 1; i++) {
            t = t + a[i][j] - a[i + 1][j];
        }
        if (t == 0) {
            printf("%c", a[0][j]);
        } else {
            break;
        }
    }
    return 0;
}


不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^