the_great_crab 2023-11-04 22:04 采纳率: 75%
浏览 7
已结题

“优美字符串”判断与合并

img


这个问题如何用c语言解决呢?试过了直接用
后来看了一会儿字符串函数,想用库函数解,但是也没有写对(如果可以烦请帮我改正以下^_^虽然但是如果是盘古开天那样的错误量就算了吧):


int compare(char* a, char* b) {//abb abb//abcb abcb//abcdef efghij
    int le1 = strlen(a);
    int le2 = strlen(b);
    char y[1001];
    int k;
    int minlen = (le1 < le2) ? le1 : le2;
    long long int i, j;
    for (i = minlen; i > 0;i--) {
        
        strncpy(y, b, i);
        char* result = strstr(a, y);
        if (result != NULL) {
            j = result - a;
            printf("here");
            return (le1 - j);
        }
        else {
            printf("there");
            continue;
        }
        //printf("%p\n%p", result, &a[0]);
        
        
        //printf("%d\n%d\n%d\n", i, j, k);
        
        
    }
    return -1;
}
int main() {
    char st[1001];
    char sr[1001];
    int i;
    scanf("%s%s", st, sr);
    
    int position = compare(st, sr);
    printf("%dhereposi\n", position);
    if (position == -1) {
        printf("%s%s", st, sr);//没有重叠,直接连着输出 
    }
    if (position >= 0) {
        printf("%s", st);

        for (i = position + 1; i < strlen(sr); i++) {
            printf("%c", sr[i]);
        }//有重叠:第二个字符串从不重叠的开始输出 
    }
    return 0;
}

求各位给出正确的程序!

  • 写回答

3条回答 默认 最新

  • 关注

    遍历字符串1,找到字符串1与字符串2前面重复的位置(必须保证从某个位置开始,s1[i+j]==s2[j],并且s1能遍历完整个字符串),然后删掉s1后面的内容。
    运行结果:

    img

    img

    代码:

    #include <stdio.h>
    #include <string.h>
    void compare(char* s1,char* s2)
    {
        int lena = strlen(s1);
        int lenb = strlen(s2);
        int i,j;
        for(i=0;i<lena;i++)
        {
            //判断从s1[i]开始的字符是否与s2[0]开始的字符串重合
            j = 0;
            while( s1[i+j] !='\0' && s2[j] != '\0' && s1[i+j] == s2[j])
                j++;
            if(s1[i+j]=='\0') //必须是s1遍历完才符号要求
            {
                s1[i] = '\0';
                break;
            }
        }
    }
    
    
    int main() {
        char st[1001];
        char sr[1001];
        int i;
        scanf("%s%s", st, sr);
    
        compare(st, sr);
        printf("%s%s",st,sr);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月15日
  • 已采纳回答 11月7日
  • 创建了问题 11月4日

悬赏问题

  • ¥15 模块化生产的路径规划哪种算法更合适?
  • ¥15 如何在animate html5文档任意位置实现文本输入功能?
  • ¥15 电机正反转电路设计中,mos管的关断问题,求原因。
  • ¥15 关于#sql#的问题:怎么找出所有同时多张有效保单的车架号
  • ¥15 KFC账号下单提示拒绝操作
  • ¥20 HC32F460串口发送仅能接到一个数据
  • ¥15 求解答一下是否可以修改一个软件运行时生成的文件内部内置的文件创建时间?
  • ¥20 WIN10蓝屏问题!
  • ¥15 Mac经常自动关机,再次打开后提示“电脑因出现问题而重新启动”
  • ¥60 使用ovito软件怎么得到金属玻璃的自由体积