任务要求首先确定字符串str1是否是str2的子字符串。如果是,则返回str2中str1的起始位置。
int instring (char *str1, char *str2);
void main () {
char *str1 = (char*) malloc (strlen(str1)*sizeof(char));
char *str2 = (char*) malloc (strlen(str2)*sizeof(char));
char ch;
int i = 0;
while (ch != '\n'){
ch = getchar();
str1[i] = ch;
i++;
}
str1[i] = '\0';
i = 0;
char ch1;
while (ch1 != '\n'){
ch1 = getchar();
str2[i] = ch1;
i++;
}
str2[i] = '\0';
printf("%d", instring(str1, str2));
return 0;
}
int instring(char *str1, char *str2){
int r;
if(*str1==0) return(0);
if(*str2==0) return -1;
if(*str1==*str2 && instring(str1+1,str2+1)==0) return(0);
r=instring(str1,str2+1);
if(r!=-1) return(r+1);
}
案例1: 该实施适用于: str1 =“Mediolan” str2 =“MMediolan”
它返回1,这是正确的。
案例2: 但它不适用于: str1 =“Mediolan” str2 =“Mediolana”
返回-1。
我被困在这里并且不知道如何重写代码,因此案例2将得到正确的处理。
答案 0 :(得分:2)
首先,这是错误的
char *str1 = (char*) malloc (strlen(str1)*sizeof(char));
char *str2 = (char*) malloc (strlen(str2)*sizeof(char));
你在str1
?中提及strlen
此外,您从未初始化ch1
以下
char ch1;
while (ch1 != '\n'){
您不应该读取未初始化的变量的值。与ch
相同。
也许您想尝试这个版本(似乎在我这边工作):
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXLEN 200
int instring (char *str1, char *str2);
int main (void)
{
char *str1, *str2;
int ch = 0;
int i = 0;
str1 = malloc (MAXLEN);
if(str1 == NULL) return 1;
str2 = malloc (MAXLEN);
if(str2 == NULL) {free(str1); return 1;}
while((ch = getchar()) != EOF && ch != '\n')
{
str1[i] = (char) ch;
i++;
}
str1[i] = '\0';
i = 0;
while((ch = getchar()) != EOF && ch != '\n')
{
str2[i] = (char) ch;
i++;
}
str2[i] = '\0';
printf("%d", instring(str1, str2));
free(str1); free(str2);
return 0;
}
int instring(char *str1, char *str2)
{
int r = 0;
if(*str1 == 0) return 0;
if(*str2 == 0) return -1;
if(*str1 == *str2 && instring(str1 + 1, str2 + 1) == 0) return 0;
r = instring(str1, str2 + 1);
if(r != -1) return (r + 1);
}