使用另一个字符串从字符串中删除空格
Removing spaces from String using another string
我正在尝试从字符串中删除空格,尝试使用字符串本身,但它根本不起作用。在调试时,我发现它在字符串 str1 中输入了奇怪的值,我不明白它为什么这样做。以下是附加的代码,可能有什么问题?为什么它不起作用?
string str = "Hello World";
string str1 = " ";
int increment = 0;
for (int i = 0; i < str.length(); i++) {
if (str[i] == ' ') {
continue;
}
else {
str1[increment] += str[i];
increment++;
}
}
str1[increment]
对于任何increment > 0
都是UB,因为str1
的长度只有1。您还将字符的值添加到每个元素,而不是附加字符串。只需更改
str1[increment] += str[i]
自
str1 += str[i]
并将string str1 = " ";
更改为string str1;
与其编写循环,不如使用 STL 算法函数进行擦除。
首先,如果给定适当的参数,算法函数不会失败。
其次,代码本身基本上是自我记录的。
例如,如果有人看你的手工编码循环,乍一看你试图完成什么并不明显。 另一方面,当C++程序员看到std::remove
时,它会立即知道它会做什么。
将使用的 STL alogrithm 函数是 std::remove,以及使用 std::string::erase((:
#include <string>
#include <algorithm>
#include <iostream>
int main()
{
std::string str = "Hello World";
str.erase(std::remove(str.begin(), str.end(), ' '), str.end());
std::cout << str;
}
输出:
HelloWorld
它是python中的代码:
txt = "hello world" spaces = " "
txt = txt.replace(" ", "")
print(txt)
您可以将其更改为所需的任何语言。 它删除句子中的空格。
首先,在这里增加值。未分配:
str1[increment] += str[i];
我想你想做:
str1[increment] = str[i];
由于您将 str1 声明为 " ",因此您将获得一个小缓冲区,因此在这种情况下,您无法在 str[n] 上为 n> 0 分配某些内容。正确的方法是:
string str = "Hello World";
string str1;
for (int i = 0; i < str.length(); i++)
if (str[i] != ' ')
str1 += str[i];
或者,如果你真的需要按照你正在做的事情去做,我建议使用 char* 而不是 std::string
string str = "Hello World";
char str1[str.length()];
int increment = 0;
for (int i = 0; i < str.length(); i++)
if (str[i] != ' ')
str1[increment++] = str[i];
str1[increment] = ' ';
最后,变量increment
将是str1
的确切大小。您可以在末尾转换为字符串:
string s = str1;
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 如何从给定字符串中删除第二次和第三次出现的$
- 在C++的字符串中搜索和删除某些字符
- 从 C 样式字符串中删除子字符串 "in place" 在C++代码中
- 使用另一个字符串从字符串中删除空格
- 删除/替换C++字符串中的多字符 (ÿû)
- 删除所有字符串后如何恢复 QStringList?
- 如何删除字符串中的前 2 个字符(如果它有"-")
- 根据新的行分隔符从字符串中删除子字符串
- C ++,如何从控制台中输入的字符串中删除字母?
- 删除字符串后C++检测到堆损坏
- 我正在尝试使用 while 循环从字符串中删除字母,直到没有字母。我在这里做错了什么?
- 如何在 c++ 中删除字符串中的某些字符?
- 删除字符串数组
- 删除字符串中具有相同值的任何相邻字母"pair"
- 高效的字符串截断算法,按顺序删除相等的前缀和后缀
- 如何使用双黑斜杠从字符串中删除单反斜杠
- 如何在编译时从string_view中删除子字符串?
- 从文件中读取多行.txt字符串删除空格并创建新文件进行输出
- c字符串 删除非字母/非空格字符 - C++