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

软件和网站开发以及相关技术探讨
回复
我是小超子
帖子: 6
注册时间: 2008-09-14 15:35

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

#1

帖子 我是小超子 » 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
kappa8086
帖子: 308
注册时间: 2008-06-23 14:42

#2

帖子 kappa8086 » 2008-09-16 17:37

莫非是说不用赋值就改变了某个操作数?如果那样我死活也不敢再动string了...估计是你理解错了
虽然我没用过STL,但也大概知道运算过程会产生临时对象的,和MFC的CString实现方法大同小异
头像
maninred
帖子: 164
注册时间: 2007-08-24 20:16
来自: Hangzhou, China
联系:

#3

帖子 maninred » 2008-09-16 20:25

String#+不会改变其本身的引用的对象吧,只是返回一个结果。

你在哪个文档看到Cpp标准是这么写的?你说的是String#+=吧?
我是小超子
帖子: 6
注册时间: 2008-09-14 15:35

是钱能课本出错了!!

#4

帖子 我是小超子 » 2008-09-17 17:20

现在明白了,结果就是满足标准的,是钱能的书(c++程序设计教程 第二版)误导了,书里p80有错,注意程序结尾的一句话(“其运行结果与f0304.cpp相同”)!
头像
maninred
帖子: 164
注册时间: 2007-08-24 20:16
来自: Hangzhou, China
联系:

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

#5

帖子 maninred » 2008-09-18 9:16

我是小超子 写了:现在明白了,结果就是满足标准的,是钱能的书(c++程序设计教程 第二版)误导了,书里p80有错,注意程序结尾的一句话(“其运行结果与f0304.cpp相同”)!
国内的书挺害人。看些国外的Cpp经典吧。
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

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

#6

帖子 自由建客 » 2008-09-18 9:58

maninred 写了:国内的书挺害人。看些国外的Cpp经典吧。
:lol:
我是小超子
帖子: 6
注册时间: 2008-09-14 15:35

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

#7

帖子 我是小超子 » 2008-09-18 12:44

自由建客 写了:
maninred 写了:国内的书挺害人。看些国外的Cpp经典吧。
:lol:
呵呵偷懒,国外的书老长,先学国内的有个基础再看。
顺便,我还给钱能发了email,尽然回复了,而且回的挺快,主要是出版社作了修改了,结果错了。
头像
wth123456
帖子: 234
注册时间: 2006-12-07 17:32

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

#8

帖子 wth123456 » 2008-10-19 17:02

错了,应该是

代码: 全选

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

int main() {
	string s1="Hello ";
	string a="123";
	s1+=a;
	cout<<s1;
	return 0;
}
中国人写的c++的书可以算钱能的最好了,可以做个入门。
十年磨一剑,霜刃未曾试。今日把示君,谁有不平事?
回复