string中 删除字符串末尾的0 如1.2000000 操作结果为 1.2

wanpishijie 2011-11-01 12:56:11
使用了c++中的string 操作 但是为什么会有错啊?
源码:
int main()
{
string a;

a = "1234500000";

for (string::iterator s = a.end() - 1;s != a.begin();s--)
{

if (*s == '0')
{
a.erase(*s);
{

if (*(s-1) != '0')

break;
}
}
}

cout <<a << endl;
return 0;
}
...全文
295 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
闲的每日C 2011-11-01
  • 打赏
  • 举报
回复
a.erase(*s);
s = a.end();//erase后面加上这句,因为删除后,要重新赋值
turing-complete 2011-11-01
  • 打赏
  • 举报
回复
听说过 迭代器失效 吗?
pathuang68 2011-11-01
  • 打赏
  • 举报
回复
参考如下代码:

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

int main(void)
{
string a = "1234500000";
reverse(a.begin(), a.end()); // 先将字符串反转

cout << a << endl;

// 一下是处理用迭代器删除元素是,迭代器失效的典型做法
for(string::iterator iter = a.begin(); iter != a.end(); ) // 把++iter移动到循环体内
{
if(*iter == '0')
{
iter = a.erase(iter); // 删除一个元素后,iter会指向被删元素的下一个元素,
// 因此在这里不需要再++iter
}
else
{
++iter;
}
}
reverse(a.begin(), a.end()); // 再反转回去

cout << a << endl;

return 0;
}
wanpishijie 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhao4zhong1 的回复:]

char s[15]="1.200000";
double d;
sscanf(s,"%lf",&d);
sprintf(s,"%lg",d);
printf("%s\n",s);
[/Quote]

很帅的方法 虽然不用c但是也长见识 啦@!
xjdreamer 2011-11-01
  • 打赏
  • 举报
回复
查查,超出末端迭代器(哨兵),逆向迭代器
赵4老师 2011-11-01
  • 打赏
  • 举报
回复
char s[15]="1.200000";
double d;
sscanf(s,"%lf",&d);
sprintf(s,"%lg",d);
printf("%s\n",s);
赵4老师 2011-11-01
  • 打赏
  • 举报
回复
printf("%lg",1.20000000);
wanpishijie 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wangliangffaflgh 的回复:]

C/C++ code


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

int main()
{
string a;

a = "1234500000";

for (string::iterator s = a.end() - 1;s != a.begin();s--)
……
[/Quote]


多谢啦 有些大意了
测试NULL 2011-11-01
  • 打赏
  • 举报
回复


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

int main()
{
string a;

a = "1234500000";

for (string::iterator s = a.end() - 1;s != a.begin();s--)
{

if (*s == '0')
{
a.erase(s); //这里改一下,不能用a.erase(*s)
if (*(s-1) != '0')
break;
}
}

cout <<a << endl;
return 0;
}

64,636

社区成员

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

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