实验任务
回文串指按字母从左到右和从右到左读一致的字符串,现在 ytaaa 需要一个程序来判断一个字符串是否是回文串。
总共有两个操作。
1. 添加一个字符串。例如 add s。每个句子长度小于 100
2. 判断第 k(从 1 开始)个字符串是否是回文串。例如 judge k。
数据输入
输入第一行包括一个正整数 N(N<=1000),表示操作总数。接下来 n 行,每行为一个操作。
数据输出
对于每个判断操作,输出判断结果,如果是回文串输出 yes,否则输出 no。编号不存在输出 error。
输入示例
5
add asdfdsa
add asdf
judge 1
judge 2
judge 3
输出示例
yes
no
error
解题思路
= =| 直接按题目要求翻译就行了
STL大法好!
参考代码
#include <iostream>
#include <vector>
#include <string>
using namespace std;
vector<string> str;
void judge(string s);
int main()
{
int n,i,num;
string opr,s,temp;
while (~scanf("%d",&n)){
getchar();
for (i = 0;i < n;i++){
cin >> opr; //读入要进行哪种操作
getchar();
if (opr == "add"){ //如果是添加的话
getline(cin,s); //再读入一个字符串
str.push_back(s); //push_back到str数组里
}else if (opr == "judge"){ //如果是判断的话
cin >> num; //读入判断的编号
if (num > str.size()) //如果编号大于str中元素的个数,输出“error”
cout << "error" << endl;
else
judge(str[num-1]);
}
}
}
return 0;
}
void judge(string s){ //判断是否回文
int i,len = s.size();
bool flag = true;
for (i = 0;i < (len+1)/2;i++) //循环到 (len+1)/ 2
if (s[i] != s[len-1-i])
flag = false;
printf("%s\n",flag?"yes":"no");
}