gpt4 book ai didi

C - 递归地子字符串在字符串中的位置

转载 作者:行者123 更新时间:2023-11-30 18:51:50 26 4
gpt4 key购买 nike

任务要求首先确定字符串 str1 是否是 str2 的子字符串。如果是,则返回str1在str2中的起始位置。

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 =“梅迪奥兰”str2 =“MMediolan”

它返回 1,这是正确的。

案例2:但它不适用于:str1 =“梅迪奥兰”str2 =“Mediolana”

它返回-1。

我被困在这里,不知道如何重写代码,所以情况2将被正确处理。

最佳答案

一开始这是错误的

 char *str1 = (char*) malloc (strlen(str1)*sizeof(char));
char *str2 = (char*) malloc (strlen(str2)*sizeof(char));

您希望在 strlen 中引用 str1 吗?

此外,您从未初始化过下面的 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);
}

关于C - 递归地子字符串在字符串中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35889976/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com