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

标签 c string find-occurrences

我如何编写以下程序:

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

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

• 一个主函数,它扫描三个字符串并将字符串放入替换中

不允许使用多于 stdio.hstdlib.hstring.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/

相关文章:

python - 访问列表中的重复元素并打印其旁边的元素

java - RFC5545。同时计算 RRULE 和 EXDATE (EXRULE) 的事件发生次数

c - 用其他子字符串替换字符串的子字符串时出现段错误

java - 如何在java中分析一个字符串以确保它既有字母又有数字?

c - 打开 Watcom Linker 在链接 C 和 Fortran 代码以构建 Matlab mex 文件时发现 undefined reference

android - 在 Android (ARM) 上比较和交换

c - 在我的 c 程序中颠倒字符串中元音的顺序有什么问题?

c++ - 最大出现次数

c - 我对数组索引感到困惑

c - 用C制作 shell 时正确的管道连接方法是什么