C:搜索第一次出现的结束索引

C: Search vor endindex of first occurence

如何编写以下程序:

• 在第二个字符串和 returns 第一次出现的结束索引中搜索字符串的函数

• 包含第一个字符串在第二个字符串中所有出现的函数,第二个字符串将被第三个字符串替换

• 扫描三个字符串并将字符串放入替换项中的主函数

不允许使用超过 stdio.h , stdlib.hstring.h

我只能从这样的代码开始,如你所见,我无法解决这三个问题中的任何一个。我希望你能帮助我。

#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 return 指向 searchTeramstrNULL 中第一次出现的指针,如果它没有出现。

在第一种情况下,我们通过取occurrence - str得到起始索引,即第一次出现的内存地址减去str开始的内存地址。然后添加 searchTerm 的长度给出结束索引。

在第二种情况下,我们只需return-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;
}