#1059. 子串位置

 别点最后一个连接

 

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

题目描述

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

输入格式

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

输出格式

输出出现的位置函数

样例

Sample Input:ui

Tobeahahedhead 
head

Sample Output:spa



思路:找到相同的字符,子、母串同时延伸,若子串所有与母串延伸部分相同,输出并结束,不然从新初始化,继续寻找相同字符。

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;
            //题目说了必有解,因此找到便中止就行了
        }

    }
}

 

更多思路code

http://www.javashuo.com/article/p-pfwgeopu-em.htmlhtm

 

喜欢就点个赞吧!!blog

相关文章
相关标签/搜索