鹤唳星辰 2023-03-04 22:24 采纳率: 25%
浏览 17
已结题

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

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


#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<num-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;i<num;i++){
            t=t+a[i][j]-a[i+1][j];
        }
        if(t==0){
            printf("%c",a[0][j]);
        }else{
        break;
    }
    return 0;
}
}
  • 写回答

2条回答 默认 最新

  • 虚心求知的熊 CSDN实力新星 2023-03-04 22:34
    关注

    第一个循环中的 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;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月13日
  • 已采纳回答 3月5日
  • 创建了问题 3月4日

悬赏问题

  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)