【发布时间】:2017-02-08 19:47:04
【问题描述】:
如何编写以下程序:
• 在第二个字符串中搜索一个字符串并返回第一次出现的结束索引的函数
• 一个函数,它包含第一个字符串在第二个字符串中的所有出现,它将被第三个字符串替换
• 一个主函数,它扫描三个字符串并将字符串放入替换中
不允许使用比 stdio.h 、 stdlib.h 和 string.h
更多的 headers我只能从这样的代码开始,如您所见,我无法解决这三个问题中的任何一个。我希望你能帮助我。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int endIdx(char *string1, char *string2, char *occu)
{
for (int i = 0; i < strlen(string1); i++)
{
for (int j = 0; j < strlen(string1); j++)
{
if (string1[i] == string2[j])
{
printf("occurence string1[%d] is in string2[%d]\n", i, j);
occu[j] = string1[i];
}
}
}
return 0;
}
int main()
{
char string1[20];
char string2[20];
char occu[20];
printf("Type in the first string: ");
scanf("%s", string1);
printf("Type in the second string: ");
scanf("%s", string2);
endIdx(string1, string2, occu);
printf("%s\n", occu);
}
【问题讨论】:
-
请提出更具体的问题。您当前的代码有问题吗?它的行为是什么?关于该代码,您无法解决哪些具体问题?
-
1.我不知道如何打印出第一次出现的 endindex。我可以通过打破 for 循环来解决它,但是我必须将所有出现的事件放入第三个字符串中。所以我无法继续,因为休息时,我无法“收集”所有事件
-
如果您可以
#include <string.h>并使用strlen(),那么您可以使用strstr(),这将通过添加一些指针算法轻松解决第一个问题。第二点,如果匹配的子串重叠会发生什么?如果第一个匹配优先,如果替换后仍有重叠怎么办? -
好的,你能描述一下,我如何解决 strstr() 的问题?我想当我找出如何正确解决第一点时,我可以解决剩下的问题
-
strstr返回指向子字符串第一次出现的指针。然后一些算术计算出它的结束索引。交给你 ;) .... 但是如果你应该用另一个子字符串 replace ,如果替换的长度不同,那么如果不创建新字符串,你就不能轻易做到这一点..
标签: c string find-occurrences