C语言 子串逆置问题

来源:百度知道 编辑:UC知道 时间:2024/06/03 15:04:41
【问题描述】
输入两行字符串s和t(s和t可以含空格,length(t)≤length(s)≤50),将s串中首次与t匹配的子串逆置,并将处理后的s串输出。
【输入形式】
输入文件为当前目录下的invertsub.in。

文件中有两行字符串s和t,分别以换行符作为结束符,其中换行符可能是Linux下的换行符,也可能是Windows下的换行符。
【输出形式】
输出文件为当前目录下的invertsub.out。

输出文件只有一行,包含一个串,为要求的输出结果。行末要输出一个回车符。
【输入样例】
helloworld
llowor
【输出样例】
herowollld
————————————————————
我自己试着编了一下 却只过了1个测试点,本人刚开始学习C语言,希望有高手指教

#include <stdio.h>
#include <string.h>

main ()
{
FILE *in,*out;

char a[50],b[50];
int i,j;
int left,right;

in=fopen("invertsub.in","r");
out=fopen("invertsub.out","w");

fscanf(in,"%s%s",&a,&b);

fclose(in);

for (i=0;i<strlen(a);i++)
{
for (j=0;j<strlen(b);j++)
{
if (a[i+j]==b[j])
left=i;
right=left+strlen(b)-1;
}
}

f

#include <stdio.h>
#include <string.h>

main ()
{
FILE *in,*out;

char a[50],b[50];
int i,j;
int left,right;

in=fopen("invertsub.in","r");
out=fopen("invertsub.out","w");

fscanf(in,"%s%s",&a,&b);

fclose(in);

for(i=0;i<strlen(a);i++)
{
left=i;
for(j=0;j<strlen(b);j++)
{
if(a[i++]!=b[j]) break;
}
i=left;
if(j==strlen(b))
{
right = left+j-1;
break;
}
}
printf("%d,%d\n",left,right);
for (i=0;i<strlen(a);i++)
{
if (i<left || i>right)
{
fprintf (out,"%c",a[i]);
printf ("%c",a[i]);
}
else
{
fprintf (out,"%c",a[right-i+left]);
printf ("%c",a[right-i+left]);
}
}
fclose (out);
}