string find

/*
字符串最大跨距
查看 提交 統計 提問
總時間限制: 1000ms 內存限制: 65536kB
描述
有三個字符串S,S1,S2,其中,S長度不超過300,S1和S2的長度不超過10,想檢測S1和S2是否同時在S中出現,且S1位於S2的左邊,並在 S中互不交叉(即,S1的右邊界點在S2的左邊界點的左側)。計算滿足上述條件的最大跨距(即,最大間隔距離:最右邊的S2的起始點與最左邊的S1的終止 點之間的字符數目)。如果沒有滿足條件的偶對S1,S2存在,則輸出 -1 

例如,S = "abcd123ab888efghij45ef67kl", S1="ab", S2="ef",其中,S1在S中出現了2次,S2也在S中出現了2次,最大跨距則爲:18

輸入
三個串:S1, S2, S3,其間以逗號間隔(注意,S1, S2, S3中均不含逗號);
輸出
S1和S2在S最大跨距;若在S中沒有滿足條件的S1和S2,則輸出-1
樣例輸入
abcd123ab888efghij45ef67kl,ab,ef
樣例輸出
18
*/
<pre name="code" class="cpp">find返回的是第一次出現ab的a的下標
find_last_of返回的是最後一次出現ef的f的下標

<pre name="code" class="cpp">#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
	string str,first,last;
	int begin,end;
	getline(cin,str,',');
	getline(cin,first,',');
	cin >> last;
	if ((str.find(first)==string::npos)||(str.find(last)==string::npos)) 
		cout << -1;//判斷是否能在S中找到S1或S2
	else {
		begin=str.find(first)+first.size()-1;//查找S1第一次出現位置
		end=str.find_last_of(last)-last.size()+1;//查找S2最後一次出現位置
		if (end-begin-1<0) cout << -1;//判斷s1是否在s2左面
		else cout << end-begin-1;
	}
	//system("pause");

	return 0;
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章