#1059. 子串位置

 别点最后一个链接

 

题目来自:http://www.51cpc.com/problem/1059

题目描述

输入字符串a和字符串b,并保证b是a的一个子串,输出b在a中第一次出现的位置。

输入格式

输入两字符串, 并保证b是a的一个子串

输出格式

输出出现的位置

样例

Sample Input:

Tobeahahedhead 
head

Sample Output:

11

思路:

找到相同的字符,子、母串同时延伸,若子串全部与母串延伸部分相同,输出并结束,否则重新初始化,继续寻找相同字符。

代码:

#include<stdio.h>
#include<string.h>

char a[1000], b[1000];//如果数组的范围较大,可将其放到主函数外部进行声明。

int main() {
    int c, j;
    scanf("%s%s", a, b);//%s输入到字符串数组中时,遇空格便停止。
    //注意:输入的到字符串数组中时,不要打    &     。
    int m = strlen(b);//获取子串的大小

    for (int i = 0;i < strlen(a);i++)
    {
        c = i, j = 0;//初始化

        while (j < m && a[c] == b[j]) //相同便继续,直到不同或者子串全部相同停止。
            c++, j++;

        if (j == m) {
            printf("%d\n", i + 1);//题目是从1开始标记,而数组是从1开始标记,所以要+1
            return 0;
            //题目说了必有解,所以找到便停止就好了
        }

    }
}

 

更多思路

https://www.cnblogs.com/Attacking-vincent/p/12720675.html

 

喜欢就点个赞吧!!

 

出处:https://www.cnblogs.com/Attacking-vincent/

 

posted @ 2020-04-17 16:32  Vincent&  阅读(553)  评论(0编辑  收藏  举报