C语言编程:输入两个字符串s和t,求这两个字符串的长度,并判断t是否是s的子串,若是则输出t在s中的起始位置,若不是输出不是子串的结果。要求不能用系统已有的字符串长度等函数。 例如 输入s=aaabcdef ? ? ? ? ? t=abcd 输出结果是s的字符串长度为8 ? ? ? ? ? ? ?t 的字符串长度为4 ? ? ? ? ? ?t是s的子串,且起始位置为3 ? ? ? 输入s=aaabcdef ? ? ? ? ? t=abce 输出结果是s的字符串长度为8 ? ? ? ? ? ? ?t 的字符串长度为4 ? ? ? ? ? ?t是不是s的子串
#include<stdio.h>
#include<stdlib.h>
int ifsame(char a[],char b[],int len1,int len2);
int main()
{
?? ?char a[20],b[20];
?? ?scanf("%s",a);
?? ?scanf("%s",b);
?? ?int i=0,len1=0,len2=0;
?? ?while(a[i]!='\0'){
?? ??? ?i++;
?? ??? ?len1++;
?? ?}
?? ?i=0;
?? ?while(b[i]!='\0'){
?? ??? ?i++;
?? ??? ?len2++;
?? ?}
?? ?printf("s的字符串长度是%d\nt的字符串长度是%d\n",len1,len2);
?? ?if(ifsame(a,b,len1,len2)==0){
?? ??? ?printf("t是不是s的子串");
?? ?}else{
?? ??? ?printf("t是s的子串,且起始位置为%d",ifsame(a,b,len1,len2));
?? ?}
}?
int ifsame(char a[],char b[],int len1,int len2)
{
?? ?int t=0;
?? ?if(len2>len1){
?? ??? ?return 0;
?? ?}else{
?? ??? ?for(int i=0;i<len1-len2+1;i++){
?? ??? ??? ?int pos=0;
?? ??? ??? ?for(int t=i;t<i+len2;t++){
?? ??? ??? ??? ?if(a[t]!=b[pos]){
?? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ?}else{
?? ??? ??? ??? ??? ?pos++;
?? ??? ??? ??? ?}?? ?
?? ??? ??? ?}
?? ??? ??? ?if(pos==len2){
?? ??? ??? ??? ?return i+1;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?return 0;
?? ?}
}
|