gpt4 book ai didi

c - 在另一个字符串中搜索最右边的字符串 - 在 c 中

转载 作者:行者123 更新时间:2023-11-30 17:56:06 25 4
gpt4 key购买 nike

Possible Duplicate:
Is there a reverse fn() for strstr

我编写了这个 main 和函数,它获取两个字符串并检查第二个字符串是否存在于第一个字符串中,然后返回最右边索引出现的地方。如果没有找到返回-1 .

这是我写的代码:

#include <stdio.h>

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

int main()
{
char a[100];
char b[100];
int search;
printf("Enter two strings, To search the second one in the first one:\n");
printf("Enter the first string to search in:\n");
fgets(a,100,stdin);
printf("Enter the second string to search in the first:\n");
fgets(b,100,stdin);
printf("\n\n THE FIRST STRING IS:%s\n\n THE SEARCH STRING IS:%s",a, b);
printf("\n\n");
search = strindex(a, b);
if(search==-1)
printf("The second String didnt found in the first string\n");
else printf("The second string appear in the first string at most right at index:%d\n",search);
return 0;
}


int strindex(char s[], char t[])
{
int foundIndex = -1;
int tempFound, startNext;
int i,j;
i = j = 0;
while (s[i]!='\0')
{
if(s[i]==t[j])
{
startNext = i+1;
tempFound = i;
while(s[i]!='\0' && t[j]!='\0' && s[i]==t[j])
i++,j++;
if (t[j]=='\0') /**check if it null**/
{
printf("found match");
foundIndex = tempFound;
}
i = startNext;
j = 0;
}
else i++;
}
return foundIndex;
}

我认为我在这行有问题:

if (t[j]=='\0') /**check if it null**/

因为我尝试将第二个字符串包含在第一个字符串中,但尽管 t[j]等于 null 它不执行内部 if 语句。

  • 我知道还有很多其他方法可以编写这个程序。但我知道这个也应该有效,并且我正在努力让它发挥作用。

最佳答案

您正在处理索引,这非常令人困惑。索引只能用于一种用途,不要随意设置和重置。我建议稍微重写你的函数并清理使用的索引

int strindex(char s[], char t[])
{
int foundIndex = -1;
int i,j;
for (i = 0; s[i]!='\0'; i++)
{
if(s[i]==t[0])
{
for(j = 1; s[i + j]!='\0' && t[j]!='\0' && s[i + j]==t[j]; j++)
;

if (t[j]=='\0') /**check if it null**/
{
printf("found match");
foundIndex = i;
}
}
}

return foundIndex;
}

您可以将内部循环替换为 strncmp当然。

现在回答你的问题;-)。您的 strindex 按预期工作。正如@wildplasser 已经指出的那样,fgets将最后的换行符 \n 存储在缓冲区中。由于要搜索的字符串中除末尾之外没有换行符,因此如果要搜索的字符串位于中间而不是末尾,则永远不会获得匹配项。

当您从 a[]b[] 中删除换行符时,您会看到 strindex 有效。另一种方法可能是在命令行上给出字符串,而不是使用 fgets 读取。

int main(int argc, char **argv)
{
int search;
printf("\n\n THE FIRST STRING IS:%s\n\n THE SEARCH STRING IS:%s", argv[1], argv[2]);
printf("\n\n");
search = strindex(argv[1], argv[2]);
if(search==-1)
printf("The second String didnt found in the first string\n");
else printf("The second string appear in the first string at most right at index:%d\n",search);
return 0;
}

关于c - 在另一个字符串中搜索最右边的字符串 - 在 c 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13787348/

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