c++ string类的, 后的空字符无法消除

问题描述

c++ string类的, 后的空字符无法消除
#include
#include
#include
using namespace std;
bool R1(string s);
int main()
{
string s1;
while(getline(cins1)&&s1 !=""q"")
{
if(R1(s1))
cout<<s1<<""是回文.n"";
else
cout<<s1<<""不是回文.n"";
cout<<""请输入下一个字符串,输入q将退出n"";
}
return 0;
}
bool R1(string s)
{
string::iterator it;
for(it=s.begin();it!=s.end();++it)
{
*it=tolower(*it);
if(!isalnum(*it))
{s.erase(it);
}
}
cout<<s<<endl;
string val(s.rbegin()s.rend());
if(val==s)
return true;
else
return false;
}

解决方案

你在for(it=s.begin();it!=s.end();it++)循环内部调用it.erase(it)会使迭代器失效的。
it指向逗号时erase,则之后it指向了空格,此时循环结束it++,就到了空格的下一字符,因此空格就去不掉

解决方案二:
http://zhidao.baidu.com/link?url=XSIUvRseQXd6aaMwI8fbXsB30zVXsOUobtzFqmj6mSsHBxCBnlLyr8fbmB4q4N_X1fPczz270LifoHNlBklaYa

解决方案三:
http://blog.sina.com.cn/s/blog_6239d7dd01013l4i.html

时间: 2024-12-10 03:55:57

c++ string类的, 后的空字符无法消除的相关文章

编程-String类下的split方法,我截取完字符串后把结果复制给一个数组这个数组长度会加1?

问题描述 String类下的split方法,我截取完字符串后把结果复制给一个数组这个数组长度会加1? 如题,这是代码: String s = ""A1B2C3D4E5F6G7H8""; String[] b = new String[8]; System.out.println(""b:"" + b.length); b = s.split(""[A-Z]""); System.out.

(四十八)string类

string类可以将字符串视为输入到一个简单变量中,像使用一个变量那样使用他. 前提是:使用头文件#include<string>,另外,string类位于名称空间std中,因此需要使用using namespace std;或者std::string 或者using std::string. 在其他方面,又类似字符串那样使用.例如,在声明并初始化的时候,需要给字符串加上双引号或者单引号,像 string abc="aaa"; 这样. 上代码: #include<io

Java的string类常量池及不可变性

1.String常量池     当使用new String("hello")时,JVM会先使用常量池来管理"hello"直接量,再调用String类的构造器来创建一个新的String对象,新创建的对象被保存在堆内存中.即new String("hello")一共产生了两个字符串对象. [常量池constant pool]管理在编译时被确定并保存在已编译的.class文件中的一些数据,包括关于类.方法.接口中的常量,和字符串常量.  [字符串常量池

J2SE综合之浅谈String类的相关应用

字符串类,包含了字符串的值和实现字符串相关操作的一些方法. 其实字符串在java中的实现比较特殊,你可以不使用构造方法,就可以直接获得一个字符串对象. String str1 = "test";//不使用构造方法 String str2 = new String("test");//使用构造方法 实际上以上两者的效果是相同的,就是创建了一个内容为"test"的字符串. 下面我们来说一下String类本身的特性. 首先需要注意到的是String是一

operate-范磊c++,在十八章写String类 “重载输入运算符” 遇到问题,请各位大侠帮忙指点!

问题描述 范磊c++,在十八章写String类 "重载输入运算符" 遇到问题,请各位大侠帮忙指点! #include using namespace std; class String { public: String(); String(char*); String(String&); virtual ~String(){cout<<"析构函数执行n";delete []str;len=0;} const int getlen()const{r

为什么java源文件中有两个类编译后只产生一个类文件

问题描述 classdemoA{publicstaticvoidmain(String[]args){demoad=newdemoa();d.getmoney();}voidgetmoney(){System.out.println("package123123123");}}classdemoa{voidgetmoney(){System.out.println("package1111");}}为什么java源文件中有两个类编译后只产生一个类文件demoA,且运

Java基础之010-深入理解Java的String类

Java基础之010-深入理解Java的String类                                        老帅        1. 首先String不属于8种基本数据类型,String是一个类.  因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性.  2. new String()和new String("")都是申明一个新的空字符串,是空串不是null:  3. String对象实例化   

java中string类转成timestamp类

问题描述 java中string类转成timestamp类 java中string类转化成timestamp时,调用了timestamp的valueof()方法,但是转换后是还有小数点的,想去掉小数点,但还是timestamp类型,该如何做呢?说明下,string是存放类似日期格式的字符串.谢谢各位大神的指导,在下感激不尽. 解决方案 timestamp本身就是带毫秒的.如果要输出用,还是的格式化成string输出.如果数据库要存储用,可以转成date后,用date.gettime()获取lon

C++ string类 用法总结

标准C++中的string类的用法总结 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯定的.也许有人会说,即使不用MFC框架,也可以想办法使用MFC中的API,具体的操作方法在本文最后给出操作方法.其实,可能很多人很可能会忽略掉标准C++中string类的使用.标准C++中提供的string类得功能也是非常强大的,一般都能满足我们开发项目时使用