2016-05-27 127 views
3

我想从一个字符串追加一些字符到另一个字符串,但我做不到。我试过这样的事情: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之后,它的空。

+1

您的循环可以简化为'std :: copy_if'。 – chris

+0

Typo。应该是'while(i where23

回答

4

您正在从目标字符串取得长度,该字符串仍然是空的,while循环根本不会执行。

变化

while(i< foo.length()){ 

while(i< fooz.length()){ 
+0

我想说的是一样的。 –

+0

我知道那里有一个问题,但在过了一段时间之后仍然是空的,那是我的问题 –

+0

@IgnacioTarrio我尝试了一个演示[这里](http://rextester.com/CJRX67493),它应该很好。它是你的所有代码?其他地方可能还有其他一些问题。 – songyuanyao

-1
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()或长度()。

+0

为什么?........... –

+0

作者的回答在这种情况下是错误的。通常情况下不好的做法是将其称为一些正在改变的东西(例如,不能使用迭代器或者没有“坏东西”可能发生的事情),但在这里并不重要。如果编译器“真的用它”,它会优化掉重复调用该方法,使其与此处一样高效。 –

0

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; 
} 
相关问题