C程序设计语言 练习2-5

①练习描述

写一个函数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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值