【发布时间】:2021-01-10 20:38:45
【问题描述】:
我最近尝试使用此站点某处提到的代码来删除字符串中的空格。答案建议从算法库中删除函数(在这里解释得很奇怪:https://www.geeksforgeeks.org/stdremove-stdremove_if-c/),但它给出了意外的输出。它用一些随机数替换所有空格。这是代码。
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
string a;
int b;
getline(cin, a);
remove(a.begin(), a.end(), ' ');
b = stoi(a);
cout << b << endl;
return 0;
}
例如,如果我输入 14 546 32,它会输出 145463232。奇怪的是,如果我输入 1 2 3 4 5,它会输出正确的东西:12345。
预期输出,输入:
我输入任何数字之间有空格的数字。
输出不带空格的数字。
我尝试使用此编译器在线编译它:https://www.onlinegdb.com/。它具有完全相同的输出。任何人都可以弄清楚代码有什么问题。而且我还需要将字符串转换为整数,然后对整数进行一些数学运算(这就是我使用 stoi 函数的原因)。谢谢。
【问题讨论】:
-
onlinegdb 是一个简洁的工具。您是否使用它来逐步执行程序以查看行为偏离您期望的地方?在寻找错误时非常有用。
-
@user4581301 你好,你的意思是我应该使用调试器。如果我问的是愚蠢的问题,我对这些东西很抱歉。
-
引用 cppreference 从范围 [first, last) 中删除所有满足特定条件的元素,并为范围的新结束返回一个过去的迭代器。它会从范围中删除您不想要的东西。不是从字符串。典型用法是在
remove返回的迭代器上调用erase以实际删除(是的。我知道这听起来很愚蠢,整个remove没有删除东西)字符串中不需要的字符。 -
一本好的 C++ 教科书不仅会解释
std::remove的作用,还会给出几个正确使用它的示例,这将清楚地说明所显示的代码还缺少哪些其他附加步骤。 -
@user4581301 我研究了擦除和删除功能之间的区别,现在我知道问题出在哪里了。感谢所有花时间回答我的问题或发表评论的人的帮助。