①练习描述
写一个函数any(s1, s2),查找字符串s2[]在字符串s1[]中第一次出现的位置,如果没有出现过则返回-1。
②思路
1.首先for循环遍历s1[],比较第一个要查找的字符s2[0],如果相等,那么下面要比较s2的剩余字符。
for(i = 0; s1[i] != '\0'; ++i){
if(s1[i] == s2[0]){ //匹配上第一个
//比较余下字符
}
}
2.假如我们在s1的 i 处匹配上了s2[0],用for循环遍历s2,从s2[1]开始,将其与s1[i+1]比较。
用sign作标志,如果匹配则sign = 1,如果不匹配则sign = 0,一旦sign = 0,立刻退出此次循环。
循环结束后,如果一直都匹配上了,那么sign就应该还是1,如果sign = 1,直接返回当前位置 i 就
可以了,由于 i 从0开始的,语言描述位置的时候+1。
3.注意如果没有查找到,返回-1。
以下是测试代码:
#include<stdio.h>
#include<stdlib.h>
#define LEN 50
// return the first location in s1 where any character from s2 occurs
int any(char s1[], char s2[]){
int i, j, sign;
for(i = 0; s1[i] != '\0'; ++i){
if(s1[i] == s2[0]){ // if s2[0] is matched, compare the rest of s2
for(j = 1; s2[j] != '\0'; ++j){
if(s1[i+j] == s2[j]){
sign = 1;
}
else sign = 0; //if not matched, sign = 0
if(sign == 0){
break;
}
}
if(sign == 1){
return i+1;
}
}
}
return -1;
}
int main(void){
char s1[LEN], s2[LEN];
int i, pos;
for(i = 0; i < LEN && (s1[i] = getchar()) != EOF; ++i);
s1[i - 1] = '\0';
for(i = 0; i < LEN && (s2[i] = getchar()) != EOF; ++i);
s2[i - 1] = '\0';
pos = any(s1, s2);
printf("%s\n", s1);
for(i = 0; i < pos - 1; ++i){
printf(" ");
}
printf("%s\n%d\n", s2, pos);
system("pause");
return 0;
}
③运行示例
输出的时候为了直观加了些空格。(^Z为文本结束符)
1268d3Ct2';39,<CtCt332Ct
^Z
Ct
^Z
1268d3Ct2';39,<CtCt332Ct
Ct
7