返回字串出现的位置问题,为什么有空格和没有空格的结果不同,有时候是正确的,有时候又是错误的!求帮忙
说明:有时候是对的,有时候又是错的,好像跟空格有关。如首先输入一个整数t,表示有t个测试用例,接下就输入一条主字符串,接下来再输入一条子串,如果子串在字串中出现了,则返回第一个出现的位置,如果在主串中没有找到输入的子串,就返回没有找到。
如:
输入2
输入:abceef fdas desfsd daxue ssde
输入:daxue
输出:20(即字串daxue首次出现的位置,空格也算进去)
输入:bbhdgfeofhsghet
输入:ssdsd
输出:没找到!
代码:
#include<string.h>
#include<malloc.h>
#include<stdio.h>
#include<iostream>
using namespace std;
#define MAXSIZE_S 1000
#define MAXSIZE_T 1000
typedef struct
{
char *ch;
int length;
}HString;
int StrAssign(HString &T,char *chars)
{
int i=0,j;
i=strlen(chars);
if(!i)
{
T.ch=NULL;
T.length=0;
}
else
{
if(!(T.ch=(char *)malloc(i*sizeof(char))))
return 0;
else
{
for(j=0;j<i;j++)
T.ch[j]=chars[j];
T.length=i;
}
}
return 1;
}
int Find_Substr(HString &S,HString &T)
{
int i=0,j=0,loca;
while(i<S.length&&j<T.length)
{
if(S.ch[i]==T.ch[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
if(j>T.length-1)
{
loca=i-T.length+1;
cout<<loca<<endl;
break;
}
}
if(i>S.length)
cout<<"没找到!"<<endl;
return 0;
}
int main()
{
int t,i;
scanf("%d",&t);//这里还是要加回车,不然第一组数据出错
getchar();
for(i=0;i<t;i++)
{
char chars_S[MAXSIZE_S];
char chars_T[MAXSIZE_T];
HString S,T;
cin.getline(chars_S,MAXSIZE_S);
cin.getline(chars_T,MAXSIZE_T);
StrAssign(S,chars_S);
StrAssign(T,chars_T);
Find_Substr(S,T);
}
return 0;
}