首页 > 解决方案 > 在C中没有指针的情况下在第二个字符串中查找第一个字符串

问题描述

我是新手C语言学生。我的老师说我们必须写一个项目:在第一个字符串中找到第二个字符串,没有任何指针(*)。到目前为止,我已经学习了循环、条件、函数和数组,它们是我唯一的选择。该项目必须从两个级别的用户那里获取字符串。检查它们并打印结果。

现在我写了一些废话:

int main()
{

        char source[MAX_STR_LEN];
        char target[MAX_STR_LEN];
        int len = 50;
        int a;
        scanf("%s", &source);
        scanf("%s", &target);

        for (int i = 0; i <= len; i++)
        {

            if (strncasecmp(source[i], target[i], strlen(target)) == 0)
            {
                int a = 1;
                if (a == 1)
                {
                    printf("%s is inner of %s", target, source);
                }
                else
                {
                    printf("%s is NOT inner of %s", target, source);
                }
            }
        }


      return 0;
}

但是当我输入两个字符串时,我的项目什么也不打印并自动关闭。我确定我的代码不正确有什么简单的方法吗?谢谢

标签: cstringpointers

解决方案


一个非常简单的方法是简单地逐个字符地检查源字符串以查看是否找到目标字符串。换句话说:

  • 检查目标字符串是否从源 [0] 开始存在。
  • 如果不是:检查目标字符串是否从源 [1] 开始。
  • 如果不是:检查目标字符串是否从源 [2] 开始。
  • 依此类推,直到到达源字符串的末尾。

这可以使用两个 for 循环来完成,其中外部循环迭代源字符串中的所有字符,内部循环迭代目标字符串,同时比较两个字符串中的字符。

您可以将其可视化为:

source: Hello World
target: lo

Hello World
lo           // No match: He != lo

Hello World
 lo          // No match: el != lo

Hello World
  lo         // No match: ll != lo

Hello World
   lo        // Match: lo != lo

一个简单的实现可能如下所示:

int main()
{

    char source[MAX_STR_LEN] = "Hello World";
    char target[MAX_STR_LEN] = "lo";

    int source_index = 0;
    int match = 0;
    while (source[source_index] != '\0')
    {
        int target_index = 0;
        while (target[target_index] != '\0' &&
               source[source_index + target_index] != '\0' && 
               source[source_index + target_index] == target[target_index])
        {
            ++target_index;
            if (target[target_index] == '\0')
            {
                match = 1;
                break;
            }
        }
        if (match) break;
        ++ source_index;
    }
    if (match)
    {
        printf("found\n");
    }
    else
    {
        printf("not found\n");
    }

  return 0;
}

推荐阅读