1. 子串定位 将子串在母串中第一次出现的位置找出来。
我写了一下那个找字串位置的函数,具体的流程你自己写写,要是有问题再追问吧!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int SubString(char *sub, char *src, int pos, int len)
{
int i;
if(pos < 0 || len < 1)
return 0;
for(i=0; i<len; i++)
{
sub[i] = src[pos+i];
}
sub[len] = '\0';
return 1;
}
int Index(char *sub, char *src)
{
int sub_len = strlen(sub);
int src_len = strlen(src);
if(sub_len < 1 || src_len <1)
return 0;
int i = 0;
char *ssub = (char *)malloc(sub_len * sizeof(char) + 1);
while(i < src_len - sub_len + 1)
{
if(SubString(ssub, src, i, sub_len))
if(0 == strcmp(sub, ssub))
return i;
i++;
}
return 0;
}
int main()
{
char src[10] = "ABCDE";
char sub[10] = "DE";
int pos = Index(sub, src);
printf("%d\n", pos);
return 0;
}
2. 字符串的求子串和子串定位问题
#include <stdio.h>
void substr(char s1[20], char s2[20], int i, int m ){
int k;
for (k=i;k<i+m;k++){
s2[k-i]=s1[k];
};
s2[m]='\0';
}
int strindex(char s1[20], char s3[20] ){
int i=0,n=-1;
for (i=0;i<strlen(s1)-strlen(s3);i++){
if (strncmp( &s1[i],s3,strlen(s3))==0) {n=i;break;}
};
return n; // 返回-1 表示没找到,否则,返回位置
}
int main(){
char s1[20]="abcd12121212abcd", s2[20], s3[20]="212";
int i,m;
printf("S1 is %s\n",s1);
printf("input i m: ");
scanf("%d %d",&i,&m);
substr(s1,s2,i,m);
printf("\nS2 is %s\n",s2);
printf("input S3, such as 212\n");
scanf("%s",s3);
printf("location: %d\n", strindex(s1,s3));
return 0;
}