📜  在不使用任何字符串函数的情况下打印给定字符串的子字符串,并在C中循环(1)

📅  最后修改于: 2023-12-03 15:37:39.458000             🧑  作者: Mango

在不使用任何字符串函数的情况下打印给定字符串的子字符串,并在C中循环

在C语言中,要打印给定字符串的子字符串,常常会使用字符串函数(如strncpy、strstr等)。但如果不能使用字符串函数,该怎么做呢?本文将介绍如何在不使用任何字符串函数的情况下打印给定字符串的子字符串,并在C中循环。

分析问题

要解决这个问题,我们需要明确以下几点:

  1. 给定字符串的起始地址和长度。

  2. 子字符串的起始位置和长度。

  3. 如何循环遍历字符串和子字符串。

解决方案
打印子字符串

首先,我们来看如何打印子字符串。假设给定字符串的起始地址为s,长度为n,子字符串的起始位置为p,长度为m。则打印子字符串的代码如下:

for (int i = 0; i < m; i++)
{
    printf("%c", *(s + p + i));
}

这个代码很简单,就是从s + p处开始遍历子字符串,每次输出一个字符。

循环遍历字符串和子字符串

接下来,我们来看如何循环遍历字符串和子字符串。假设给定字符串的起始地址为s,长度为n,子字符串的起始位置为p,长度为m,算法如下:

for (int i = 0; i <= n - m; i++)
{
    if (strncmp(s + i, s + p, m) == 0) // 判断是否为子字符串
    {
        // 如果是子字符串,则打印子字符串
        for (int j = 0; j < m; j++)
        {
            printf("%c", *(s + i + j));
        }
        printf("\n");
    }
}

注:strncmp函数是C语言中比较字符串的函数,n表示比较的字符数。

上面的算法中,我们从字符串s的起始地址开始遍历,每次比较长度为m的子字符串是否与给定的子字符串相同。如果是,则打印子字符串;否则继续遍历。

完整代码

下面是完整的代码:

#include <stdio.h>

int main()
{
    char s[] = "hello world";
    int n = sizeof(s) - 1; // 字符串的长度
    int p = 3; // 子字符串的起始位置(从0开始)
    int m = 5; // 子字符串的长度

    for (int i = 0; i <= n - m; i++)
    {
        if (strncmp(s + i, s + p, m) == 0)
        {
            for (int j = 0; j < m; j++)
            {
                printf("%c", *(s + i + j));
            }
            printf("\n");
        }
    }

    return 0;
}
总结

本文介绍了如何在不使用任何字符串函数的情况下打印给定字符串的子字符串,并在C中循环。其中,我们讲解了如何打印子字符串、如何循环遍历字符串和子字符串,并给出了完整的代码。如果您在实际开发中遇到类似的问题,不妨试试本文提供的解决方案。