怎样用一个char 替换 string 中 指定位置的一个字符?

GUNDAMRX 2007-07-17 09:43:58
//tem="physics 1203 1 1";想把最后一个一加上1
int from=tem.rfind(" ");
tem.replace(from,1,char(tem.at(from+1)+1));

如题 编译器老是对这一句报错
...全文
446 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
linfengc 2007-07-17
  • 打赏
  • 举报
回复
wwwabc0001(乡下少年) 说的对,

tem.replace(from+1,1,1,(char)(tem.at(from+1)+1));这个可以用

但是tem.replace(from+1,1,string(1,(char)(tem.at(from+1)+1)));是不行的,


juicee 2007-07-17
  • 打赏
  • 举报
回复
不过直接用字符串形式表示图书信息实在- -。。。虽然输入方便。。。
至少改用结构体吧。。。
GUNDAMRX 2007-07-17
  • 打赏
  • 举报
回复
tem[tem.size ()-from]+=1;

最后一句 改成这样就行了

把这个和JAVA 的String 搞混了 以为不能直接修改。。。。。。。。
linfengc 2007-07-17
  • 打赏
  • 举报
回复
string有个构造函数 例:string ss(1,'f');
让我想到
char ch = (char)tem.at(from+1);
ch = ch +1;
tem.replace(from,1,string sss(1,char(ch)));
但是string sss(1,char(ch))是非法的。
无语了
juicee 2007-07-17
  • 打赏
  • 举报
回复
string tem("physics 1203 1 1");//想把最后一个一加上1
int from=tem.rfind(" ");
++tem.at(from+1);
virtualxmars 2007-07-17
  • 打赏
  • 举报
回复
你这样表述一个数据真的不是很合理,如果你想自己的程序真正能跑起来,那么还是采用更合理的方式才对,尝试使用2进制的方式来对这些数据进行存储吧.虽然这会花费你一些时间,但是以后会为你赢得更多的时间.例如你要再加一个字段的数据信息呢?然后再加一个字符串信息呢?你的程序将会被改得乱七八糟,你会忙于代码修改-调试-找BUG-再修改-然后继续找BUG...没完没了~
wwwabc0001 2007-07-17
  • 打赏
  • 举报
回复
很简单,你这个相当于replace(int,int,char).而replace没有这样的重载类型。
你可以使用replace(int,int,const string&) 或者replace(int,int,int,char).
你把你的那一句修改为:
tem.replace(from+1,1,string(1,(char)(tem.at(from+1)+1)));
或者
tem.replace(from+1,1,1,(char)(tem.at(from+1)+1));
就可以了。
结果是term="physics 1203 1 2".
GUNDAMRX 2007-07-17
  • 打赏
  • 举报
回复
string tem="physics 1203 1 1";
size_t from=tem.rfind(" ");
tem.replace(tem.size ()-from,1,char(tem.at(tem.size ()-from)+1));

修改成size_t 还是报错
G:\CODE\homework\classtest\newBookStorage.cpp(35) : error C2664: 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &__thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::
replace(unsigned int,unsigned int,const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &)' : cannot convert parameter 3 from 'char' to 'const class std::basic_string<char,struct std::char_traits<char>,class s
td::allocator<char> > &'
Reason: cannot convert from 'char' to 'const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >'
No constructor could take the source type, or constructor overload resolution was ambiguous
linfengc 2007-07-17
  • 打赏
  • 举报
回复
改成 tem.size()-from; 就变成1203前面的空格了
他用的是rfind
linfengc 2007-07-17
  • 打赏
  • 举报
回复
要让at地方的值加1,必然变成char,
char又无法转换为string(编译报错),
replace方法里面必须是string对象。
所以无法这样做。
GUNDAMRX 2007-07-17
  • 打赏
  • 举报
回复
图书信息包括书名, 书号, 库存量, 现存量共4项. 首先输入3本书的信息, 并将其存入文件 ”book.dat” 中. 当有新书入库时, 先判断文件中是否有此书( 即比较书名 ), 若有则修改库存量, 现存量的信息; 若无此书, 则将该书的信息添加到文件中.

这一句是要把最后一个1(现存量)加一

其实应该是 把最后一句的 from 改成 tem.size()-from;
linfengc 2007-07-17
  • 打赏
  • 举报
回复
首先应该使用string::size_type from = tem.rfind(" ");

其次,对你这句“想把最后一个一加上1”不太懂? 1+1变成2吗?

64,649

社区成员

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

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