看看这个程序有什么不妥没?

zhshto886 2007-04-19 11:48:36
题目::::称正读和反读都相同的字符序列为“回文”,例如,“abcddcba”、“qwerewq”是回文,“ashgash”不是回文。试写一个算法判断读入的一个以“@”为结束符的字符序列是否为回文。

#include<iostream>
#include<string>
using std::string;
using std::cout;
using std::cin;
using std::endl;
int main()
{
string s;
string sum;
cout<<"请输入一个字符串(以符号‘&’结束):"<<endl;
while(cin>>s) //while用于把输入的字符串储存到string sum中。
{
sum+=s;
if(sum.size()==1&&sum[0]=='&') //这里的判断当只输入一个字符‘&’ 时,重新输入
{
cout<<"必须在'&'输入字符串,请重新输入:"<<endl;
sum="";
continue;
}
if(s[s.size()-1]=='&') //用于检测字符串后面的‘&’检测到停止读入字符串。
break;
}
//for语句用于判断是不是回文字符串
for(string::size_type begin=0,end=(sum.size()-2);begin!=end&&begin!=end+1;++begin,--end)
{
if(sum[begin]!=sum[end])
{
cout<<"您所输入的不是回文字符串!"<<endl;
return 0;
}
}
cout<<"您所输入的是一个回文字符串!"<<endl;

return 0;
}
...全文
275 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhshto886 2007-04-21
  • 打赏
  • 举报
回复
up
yutaooo 2007-04-20
  • 打赏
  • 举报
回复
我觉得挺好的. 我照你这个也写了个, 不过for不变式的处理跟你有点小区别.

// test5.cpp
// cl -EHsc test5.cpp

#include <iostream>
#include <string>
#include <cstdlib> // for std::size_t
#include <cassert> // for assert
#include <cmath> // for std::floor

bool is_same(std::string const & s) {
assert(!s.empty());
std::size_t length = s.size() - 1; // 不算&
assert(s[length] == '&');
std::size_t half = std::floor(static_cast<double>(length));

for(std::size_t offset = 0; offset != half; ++offset)
if(s[offset] != s[length - offset - 1]) return false;

return true;
}

int main() {
std::string input;
while(std::cin >> input) {
if(is_same(input))
std::cout << "您所输入的是一个回文字符串!" << std::endl;
else
std::cout << "您所输入的不是回文字符串!"<< std::endl;
}
return EXIT_SUCCESS;
}

65,212

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧