|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
#include<stdlib.h>//声明内存的函数在这里
#include<string.h>
typedef struct {
char* str;
int length;
}String;
String* init_string(void)
{
String *L = (String*)malloc(sizeof(String));
L->str= NULL;
L->length = 0;
return L;
}
int SubString(String* L, String S, int pos, int len)//求子串,用*L返回子串从pos这个位置,选len长度的子串S
{
if (S.length < pos + len - 1||pos<0||len<0)
{
printf("子串出现错误");
return 0;
}
else
{
L->str = (char*)malloc((len + 1) * sizeof(char)); // +1 是为了存放末尾的 '\0'
for (int i = pos; i < pos + len; i++)
{
L->str[i-pos] = S.str[i];
}
L->str[len]='\0';
L->length = len;
}
return 1;
}
int Index(String S, String L)//S是主串,L是子串
{
int i = 0, j = 0;
while (i <=S.length && j <=L.length)
{
if (S.str[i] == L.str[j])
{
i++;
j++;
}
else
{
i = i - j + 1;
j = 0;
}
}
if (j >L.length)
{
printf("找到子串首个位置:%d",i-j+1);
return i - j + 1;
}
else
{
printf("没找到!!!");
return 0;
}
}
int main(void)
{
String *S=init_string();
String *L=init_string();
char* ch = "hello world";
S->str = (char*)malloc(sizeof(char)*(strlen(ch)+1));
strcpy_s(S->str,strlen(ch)+1, ch);//进行安全的输入;
S->length = strlen(ch) + 1;//没有设置S的长度,导致SubString函数运行不了
SubString(L, *S, 1, 5);
printf("子串L:%s\n", L->str);
printf("子串S:%s\n", S->str);
Index(*L,*S);
free(S);
free(L);
}
Index返回值永远都是错误的
|
|