substr函式以及reserve函式
str.substr函式
string str="123456789";
string str2=str.substr(0,5);//能夠給返回str字串中位置索引從0到5的字串
cout<<str2<<endl;
輸出結果:12345
reserve函式
string str3=reverse(str.begin(),str.end());//起到翻轉作用
cout<<str3<<endl;
輸出結果:987654321
注意:reverse函式只適用於vector和string型別
應用例項:
迴文串
題目描述給定一個字串,問是否能夠通過新增一個字母將其變成“迴文串”。 “迴文串”是指正著和反著讀都一樣的字串。如:”aa”,”bob”,”testset”是迴文串,”alice”,”time”都不是迴文串。
輸入 一行一個有小寫字母構成的字串,字串長度不超過10。 | 樣例輸入 coco |
輸出 如果輸入字串可以通過新增一個字元,則輸出”YES”,否則輸出”NO”。 | 樣例輸出 YES |
時間限制C/C++語言:1000MS其它語言:3000MS | 記憶體限制C/C++語言:65536KB其它語言:589824KB |
思路:新增的字元不確定是在頭部,尾部,還是字串之中,因此需要在字串中採用迴圈
程式:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string str;
cin >> str;//給定一個字串
string str2, str3;
bool flag = false;
for (int i = 0; i < str.size(); i++)
{
if (i == 0)//將字元新增在頭部的情況
str2 = str[str.size() - 1] + str.substr(0, str.size());
else if (i == str.size() - 1) //將字元新增在尾部的情況
str2 = str.substr(0, str.size()) + str[0];
else//新增字元存在字串間
str2 = str.substr(0, i) + str[str.size() - i] + str.substr(i, str.size() - i);
str3 = str2;
reverse(str3.begin(), str3.end());//若str3翻轉後與str2相等,則說明是迴文串
if (str3 == str2)
{
flag = true;
break;
}
}
if (flag == true)
cout << "Yes" << endl;
else
cout << "No" << endl;
system("pause");
return 0;
}