我想从一个字符串追加一些字符到另一个字符串,但我做不到。我试过这样的事情:push_back从一个字符串到另一个字符串的字符
std::string fooz = "fooz";
std::string foo;
int i = 0;
while(i< fooz.length()){
if(fooz[i] != 'z'){
foo.push_back(fooz[i]);
}
i++;
}
foo之后,它的空。
我想从一个字符串追加一些字符到另一个字符串,但我做不到。我试过这样的事情:push_back从一个字符串到另一个字符串的字符
std::string fooz = "fooz";
std::string foo;
int i = 0;
while(i< fooz.length()){
if(fooz[i] != 'z'){
foo.push_back(fooz[i]);
}
i++;
}
foo之后,它的空。
您正在从目标字符串取得长度,该字符串仍然是空的,while循环根本不会执行。
变化
while(i< foo.length()){
到
while(i< fooz.length()){
我想说的是一样的。 –
我知道那里有一个问题,但在过了一段时间之后仍然是空的,那是我的问题 –
@IgnacioTarrio我尝试了一个演示[这里](http://rextester.com/CJRX67493),它应该很好。它是你的所有代码?其他地方可能还有其他一些问题。 – songyuanyao
std::string fooz = "fooz";
std::string foo;
int i = 0;
int len=fooz.size();
while(i< len){
if(fooz[i] != 'z'){
foo.push_back(fooz[i]);
}
i++;
}
唐未在while循环调用的std :: string.size()或长度()。
为什么?........... –
作者的回答在这种情况下是错误的。通常情况下不好的做法是将其称为一些正在改变的东西(例如,不能使用迭代器或者没有“坏东西”可能发生的事情),但在这里并不重要。如果编译器“真的用它”,它会优化掉重复调用该方法,使其与此处一样高效。 –
STL可以帮助你处理这种情况。
这一个使用remove算法,它提供了一系列的元素擦除。
#include <string>
#include <iostream>
#include <algorithm>
int main()
{
std::string str("aaazbbb");
std::cout << str << std::endl;
str.erase(std::remove(str.begin(), str.end(), 'z'), str.end());
std::cout << str << std::endl;
}
您的循环可以简化为'std :: copy_if'。 – chris
Typo。应该是'while(i
where23