注册 登录
编程论坛 C++教室

这个为什么会进入死循环?求大佬回复

l1234779104 发布于 2020-05-06 10:54, 1672 次点击
#include<stdio.h>
#include<string.h>
#define N 100
int main()
{
    char s[N],t[N],*p,*p1;
    int i,j,k,a,b;
    while(scanf("%[^\n] %[^\n]",s,t)!=EOF){
        p=s;p1=t;
        a=strlen(s);b=strlen(t);
            k=0;
            for(j=1;j<a;j++)
            if(*(p+k)<=*(p+j))
            k=j;
            p=p+k+1;
            while(*p1!='\0'){
                *(p+b)=*p;
                *p=*p1;
                p++,p1++;
            }
            *(p+b)='\0';
            printf("%s\n",s);
    }
}
3 回复
#2
lin51616782020-05-06 11:03
第一个 %[^\n] 前面也要加空格
scanf(" %[^\n] %[^\n]",s,t)
#3
l12347791042020-05-06 11:17
麻烦再帮我看看这个题,输出感觉是对的但是提交时wrong answer

Description
给定两个字符串s和t,在s字符串中的最大字符后边插入字符串t。

Input
测试数据有多组,每组包含两个字符串s和t,分别占两行,均不超过100个字符。

Output
对于每组测试数据,输出插入后的新字符串,单独占一行。若有多个最大字符,则插在第一个之后。

Sample Input
abcdcba
1234
xyz
gggh
Sample Output
abcd1234cba
xyzgggh

#include<stdio.h>
#include<string.h>
#define N 300
int main()
{
    char s[N],t[N],*p,*p1;
    int i,j,k,a,b;
    while(scanf(" %[^\n] %[^\n]",s,t)!=EOF){
        p=s;p1=t;
        a=strlen(s);b=strlen(t);
            k=0;
            for(j=1;j<a;j++)
            if(*(p+k)<=*(p+j))
            k=j;
            p=p+k+1;
            while(*p1!='\0'){
                *(p+b)=*p;
                *p=*p1;
                p++,p1++;
            }
            *(p+b)='\0';
            puts(s);
    }
}
#4
fulltimelink2020-05-07 07:06
回复 3楼 l1234779104
if(*(p+k)<=*(p+j))

这句不能加=号,因为多个相同的最大值时,要记录第一个,而不是最后一个
1