1912: 【入门】求子串的位置

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:60 解决:29

题目描述

请问在一个父字符串s中是否存在子字符串t。如果存在,则输出子字符串t在父字符串中所有的起始位置,如果不存在,则输出-1。
比如:假设父字符串s = "Go Abc good goole!",子字符串t = "go",那么输出位置:
8
13

再比如:假设父字符串s = "Go Abc good goole!",子字符串t = "hi",那么输出结果:-1。

输入

第一行输入父字符串的值;

第二行输入子字符串的值;

输出

输出子字符串在父字符串中所有的位置,如果父字符串中不存在子字符串,请输出-1。

样例输入 复制

Go Abc good goole!
go

样例输出 复制

8
13

提示

C/C++提示:

请分别用循环嵌套、find及substr三种方法求解;


#include<bits/stdc++.h>
using namespace std;

int main(){
	bool flag,found=false;
    string s,t;
    getline(cin,s); 
    getline(cin,t); 
    for(int i=0;i<s.length();i++) {
    	flag=true;
    	for(int j=0;j<t.length();j++) {
    		if (s[i+j]!=t[j]) {
    			flag=false;
    			break;
			}
		}
		if (flag) {
			found=true;
			cout<<i+1<<endl;
		}
	}
	if (!found) cout<<-1;
	return 0;
}


#include <bits/stdc++.h> 
using namespace std;
int main(){
    string s,t;
    getline(cin,s); 
    getline(cin,t); 
    int p = s.find(t);  
    if(p == -1){ //如果找不到
        cout<<-1;
	}else{
        //当s中能够找到子字符串t时 
        while(p != -1){
            cout<<p + 1<<endl;
            //继续找下一个t出现的下标 
            p = s.find(t,p+1);
        }
    }
    return 0;
}


#include <bits/stdc++.h> 
using namespace std;
int main(){
    string s,t;
    string x; //截取出来的每个子字符串 
    getline(cin,s); 
    getline(cin,t);
    bool f = false; //假设不存在 
    int i;
    /*
    从每个字符开始截取t.size()个子字符串出来
	判断截取出来的结果是否是要找的字符串t
	如果是,输出i+1
    */
    for(i = 0;i <s.size();i++){
        x = s.substr(i,t.size()); 	
        if(x == t){
            cout<<i+1<<endl; 
	        f=true;
        }
	}
    if(f == false){
        cout<<-1;
	}
    return 0;
}