他这个具体求法怎么求的呀,这个if条件限制的是什么,具体思路麻烦解答一下
#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 开始的子串即可。
写法一:
if(表达式)//表达式结果为真,语句执行,否则不执行
语句;
代码实例:
#include <stdio.h>
int main()
{
int age = 10;
if (age >= 18)//结果为假,语句不执行
printf("成年");
return 0;
}//所以打印结果为空
写法二:
if(表达式)//如果表达式为真,语句1执行,否则语句1被执行
语句1;
else
语句2;
代码实例:
#include <stdio.h>
int main()
{
int age = 10;
if (age >= 18)//语句为假,执行语句2
printf("成年");
else
printf("未成年");//语句2为未成年,所以打印的结果为未成年
return 0;
}
写法三:
//多分支
if(表达式1)//如果表达式1位真,语句1执行,否则看表达式2,表达式2为真,则语句2执行,否则语句3执行
语句1;
else if(表达式2)
语句2;
else
语句3;
代码实例:
#include <stdio.h>
int main()
{
int age = 20;
if (age >18)//表达式1为真
printf("成年\n");//打印结果为成年
else if(age = 18)
printf("刚刚成年");
else
printf("未成年\n");
return 0;
}