计算机二级(每日一题)

他这个具体求法怎么求的呀,这个if条件限制的是什么,具体思路麻烦解答一下

img

#include <stdio.h>

char *a = "you";
char b[] = "welcome you to China!";

int main()
{
    int i, j = 0;
    char *p;

    for (i = 0; b[i] != '\0'; i++) {
        if (*a == b[i]) {
            p = a;

            for (j = i; *p != '\0'; j++, p++) {
                if (*p != b[j]) {
                    break;
                }
            }

            if (*p == '\0') {
                break;
            }
        }
    }

    printf("%s", &b[i]);

    return 0;
}

首先来是变量的定义和初始化部分:

char *a = "you";
char b[] = "welcome you to China!";
int i, j = 0;
char *p;

这里定义了两个指向字符的指针 a 和 p,分别指向字符串常量 "you" 和字符数组 b 的首地址;还定义了两个整型变量 i 和 j,变量 j 初始化为 0。

然后是程序的核心部分:

for (i = 0; b[i] != '\0'; i++) {
    if (*a == b[i]) {
        p = a;

        for (j = i; *p != '\0'; j++, p++) {
            if (*p != b[j]) {
                break;
            }
        }

        if (*p == '\0') {
            break;
        }
    }
}
printf("%s", &b[i]);

首先是外层循环,对字符串 b 进行遍历,利用 i 来保存当前遍历到的字符在 b 中的下标,当遇到一个字符与 a 中的第一个字符相同时,进入内层循环。

内层循环则利用指针 p 来遍历字符串 a,同时根据 j 的值检查 a 和 b 对应位置的字符是否相等。

最后,如果 a 中所有字符均被匹配到了,那么 p 指向的位置就是 a 在 b 中首次出现的位置。于是程序打印出字符串 b 从该位置开始的所有字符,即为 &b[i]。

总体上,这段程序的功能是:查找字符串 a 在字符串 b 中首次出现的位置,输出从该位置开始的所有字符。如果不存在这样的位置,则什么也不做。

希望这段解释对您有所帮助。
本题目是指我所列举的代码上稍作修改,只是在找到 a 在 b 中出现的位置之后,增加了一次打印操作。具体来说,利用 printf 函数打印从位置 i 开始的子串即可。