C++面試題 以指定字符爲界翻轉兩邊的字符串

題目:

 

#include <iostream>
#include <string>
#include<algorithm>

using namespace std;

string reverse(const string& s, const char c)
{
	string ret = "";
	unsigned int Foundindex = 0, StartIndex = 0;
	string tmpString = "";
	

	Foundindex = s.find(c); //find返回c在字符串中的位置

	if (Foundindex == s.npos) //未找到字符 返回npos
		return s;

	if ((Foundindex == 0) && (s.length() == 1))
		return ret + c;

	while (1)
	{
		tmpString = s.substr(StartIndex, Foundindex - StartIndex); //從StartIndex開始到Foundindex - StartIndex 取出子串
		reverse(tmpString.begin(), tmpString.end()); //翻轉
		ret += tmpString;

		StartIndex = Foundindex+1;
		Foundindex = s.find(c, Foundindex + 1); //找到下一個c字符的位置
		if (Foundindex  != s.npos)
		{
			ret += c;	
		}			
		else  //在接下來的子串中無法找到c字符
		{   
			ret += c;
			tmpString = s.substr(StartIndex, s.length()); //從StartIndex開始到字符串結束位置 取出子串
			reverse(tmpString.begin(), tmpString.end());
			ret += tmpString;
			break;
		}
			

	}

	return ret;
}

int main()
{
	cout << reverse("", ';') << endl;                 // 輸出:空字符串
	cout << reverse(";", ';') << endl;                // 輸出:;
	cout << reverse("abcde;", ';') << endl;           // 輸出:edcba;
	cout << reverse("we;tonight;you", ';') << endl;   // 輸出:ew;thginot;uoy

	return 0;
}

運行結果


;
edcba;
ew;thginot;uoy

 

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