分页: 1 / 1

c++字符串来连接后的返回值问题

发表于 : 2008-09-16 17:09
我是小超子
/*
我知道好多教科书上说的都是在c++中两个字符串比如s1,s2连接即s1+s2的返回值为指向s1首字符的指针,且s1为原来添加上s2的结果(好像这也是c++标准),可是我在ubuntu下用gcc编译下面的程序结果不是这样的,怎么回事阿?哪位解释下,gcc不是比vc还标准吗?!
*/
#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
string a,s1="Hello ";
string s2="123";
a=s1;

cout<<((a==s1)?"":"not ")<<"equel"<<endl;

cout<<a+s2<<endl;

cout<<"before:"<<a<<endl;//主要就是这里要解释!
reverse(a.begin(),a.end());
cout<<a<<endl;

cout<<a.replace(0,9,9,'c')<<endl;

cout<<((s1.find("ell")!=-1)?"":"not ")<<"equel"<<endl;
cout<<((s1.find('c')!=-1)?"":"not ")<<"equel"<<endl;
return 0;
}

输出的结果:
equel
Hello 123
before:Hello //这里!!
olleH//当然还这里!
ccccccccc
equel
not equel

发表于 : 2008-09-16 17:37
kappa8086
莫非是说不用赋值就改变了某个操作数?如果那样我死活也不敢再动string了...估计是你理解错了
虽然我没用过STL,但也大概知道运算过程会产生临时对象的,和MFC的CString实现方法大同小异

发表于 : 2008-09-16 20:25
maninred
String#+不会改变其本身的引用的对象吧,只是返回一个结果。

你在哪个文档看到Cpp标准是这么写的?你说的是String#+=吧?

是钱能课本出错了!!

发表于 : 2008-09-17 17:20
我是小超子
现在明白了,结果就是满足标准的,是钱能的书(c++程序设计教程 第二版)误导了,书里p80有错,注意程序结尾的一句话(“其运行结果与f0304.cpp相同”)!

Re: 是钱能课本出错了!!

发表于 : 2008-09-18 9:16
maninred
我是小超子 写了:现在明白了,结果就是满足标准的,是钱能的书(c++程序设计教程 第二版)误导了,书里p80有错,注意程序结尾的一句话(“其运行结果与f0304.cpp相同”)!
国内的书挺害人。看些国外的Cpp经典吧。

Re: 是钱能课本出错了!!

发表于 : 2008-09-18 9:58
自由建客
maninred 写了:国内的书挺害人。看些国外的Cpp经典吧。
:lol:

Re: 是钱能课本出错了!!

发表于 : 2008-09-18 12:44
我是小超子
自由建客 写了:
maninred 写了:国内的书挺害人。看些国外的Cpp经典吧。
:lol:
呵呵偷懒,国外的书老长,先学国内的有个基础再看。
顺便,我还给钱能发了email,尽然回复了,而且回的挺快,主要是出版社作了修改了,结果错了。

Re: c++字符串来连接后的返回值问题

发表于 : 2008-10-19 17:02
wth123456
错了,应该是

代码: 全选

#include <iostream>
#include <string>
using namespace std;

int main() {
	string s1="Hello ";
	string a="123";
	s1+=a;
	cout<<s1;
	return 0;
}
中国人写的c++的书可以算钱能的最好了,可以做个入门。