2016-05-27 4 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

Я знаю, что там есть проблема, но foo все еще пуст после этого, вот моя проблема –

+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++; 
} 

Дон не называют зЬй :: 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; 
} 
Смежные вопросы