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;
}