gpt4 book ai didi

c - 返回文本中任意字符的位置

转载 作者:行者123 更新时间:2023-11-30 15:43:16 25 4
gpt4 key购买 nike

该程序旨在返回表 s2 中的字符在表 S1 的文本中的位置。如果失败,它将返回-1。

#include <stdio.h>
#include <stdlib.h>
#define RANGE 10

int any(char [], char []);

int main()
{
char s1[RANGE];
char s2[RANGE];
int i,j;
while( (s1[i]=getchar()) != EOF);
while( (s2[j]=getchar()) != EOF);
printf("%d", any(s1, s2));
}

int any(char s1[], char s2[])
{
int i,j;

for(i=0;s1[i]!='\0';i++)
for(j=0;s2[j]!='\0';j++)
{
// for debug
printf("\n%s", s1[i]);
printf("\n%s", s2[j]);
//
if(s1[i]==s2[j])
return i;
}
return -1;
}

在我看来,问题是在比较表中的字符时出现的。

在这种情况下,程序应返回 -1: enter image description here

最佳答案

该代码存在以下问题:

(1) 变量 ij 在代码中未初始化,可能导致崩溃:

int i,j;
while( (s1[i]=getchar()) != EOF);
while( (s2[j]=getchar()) != EOF);

(2) 当读取输入时,代码还需要增加 ij 的值。如果不这样做,将导致所有输入都写入 s1[0]/s2[0]:

while( (s1[i]=getchar()) != EOF);
while( (s2[j]=getchar()) != EOF);

(3) 应从 s1/s2 中删除终止 ^Z 字符(您可能还需要删除 0x0A(换行符))。

(4) 调试语句输出字符,而不是字符串,因此 printf() 格式字符串应为“\n%c”,而不是“\n” %s”。

清理代码会得到以下工作版本:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define RANGE 10

int any(char [], char []);

int main()
{
char s1[RANGE];
char s2[RANGE];
int i,j;

i = j = 0;

while( (s1[i++]=getchar()) != EOF);
s1[i-2] = 0;
while( (s2[j++]=getchar()) != EOF);
s2[j-2] = 0;

printf("%d", any(s1, s2));
}

int any(char s1[], char s2[])
{
int i,j;

for(i=0;s1[i]!='\0';i++)
for(j=0;s2[j]!='\0';j++)
{
// for debug
printf("\n%c", s1[i]);
printf("\n%c", s2[j]);
//
if(s1[i]==s2[j])
return i;
}
return -1;
}

“aaaa^Z”/“bbbb^Z”的输出为:

enter image description here

关于c - 返回文本中任意字符的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19891089/

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