我如何编写以下程序:
• 在第二个字符串中搜索字符串并返回第一次出现的结束索引的函数
• 一个函数,其中包含第二个字符串中所有出现的第一个字符串,该字符串将被第三个字符串替换
• 一个主函数,它扫描三个字符串并将字符串放入替换中
不允许使用多于 stdio.h 、 stdlib.h 和 string.h 的 header
我只能从这样的代码开始,正如你所看到的,我无法解决这三个问题中的任何一个。我希望你能帮助我。
#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);
}
最佳答案
以下程序使用 strstr
来实现您的 endIdx
问题。
strstr
返回指向 str
中第一次出现 searchTeram
的指针,如果没有出现,则返回 NULL
。
在第一种情况下,我们通过取 occurrence - str
来获取起始索引,即第一次出现的内存地址减去 str
开始的内存地址。然后加上 searchTerm
的长度就得到了结束索引。
在第二种情况下,我们只需返回-1
:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
long endIdx(const char *str, const char *searchTerm) {
long result = -1;
const char* occurrence = strstr(str,searchTerm);
if (occurrence != NULL) {
result = (occurrence - str) + strlen(searchTerm);
}
return result;
}
int main(void)
{
// ----------------012345678901234
const char* str = "Hello world! world is beautiful!";
const char* searchTerm = "world";
long endidx = endIdx(str, searchTerm);
printf("endidx (should be 11): %ld\n", endidx);
endidx = endIdx(str, "not to be contained");
printf("endidx (should be -1): %ld\n", endidx);
return 0;
}
关于C:搜索第一次出现的结束索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42122300/