2015-08-28 32 views
0

比方說,我有一個輸入文件和一個輸出文件。輸入文件讀取這樣的事情,當我打開它:擦除用戶從讀取輸入文件輸入的字符串

Happy birthday to everyone!

然後我進入,我想從所讀取,並將其寫入到輸出文件中的數據字符串中刪除的字符串。例如,如果我刪除「的」,我會得到這樣的:

Hppy birhdy o everyone! 

如何我可以使用str.erase或另一個字符串的方法來做到這一點?

+0

使用字符串::找到 – Allanqunzi

+1

的std :: string ::擦除從兩個位置之間刪除字符。 std :: remove_if可以刪除一個特定的字符值或採用一個匹配多個的lambda。 std :: regex和std :: regex_replace可以匹配任何你想要的並刪除它。如果你想使用std :: remove_if看看http://stackoverflow.com/questions/5891610/how-to-remove-characters-from-a-string –

回答

1
#include <string> 
#include <algorithm> 

static bool is_a_t(char c) { return c == 'a' || c == 't'; } 

std::string in("Happy birthday to everyone!"); 
in.erase(std::remove_if(in.begin(), in.end(), is_a_t), in.end()); 
+0

考慮到'std :: remove_if'的時間複雜性,我寧願做一個新的副本:P – Lingxi

+0

他們都是線性時間,不是嗎?就地修改甚至節省了重新分配工作。 – timrau

+0

是的,是的。我剛剛失去了主意。 – Lingxi

1
#include <algorithm> 
#include <iostream> 
#include <iterator> 
#include <string> 

std::string get_processed_copy(const std::string& src, const std::string& remove) { 
    std::string dst; 
    std::remove_copy_if(src.begin(), src.end(), std::back_inserter(dst), 
     [&](char c) { 
      return remove.find(c) != remove.npos; 
     }); 
    return dst; 
} 

int main() { 
    std::cout << get_processed_copy("Happy birthday to everyone!", "at") << std::endl; 
} 
+0

如果文件中的數據是逐個字符讀取並放入數組中,該怎麼辦? – Duck

+0

'std :: basic_string'有一個構造函數重載,它接受一個以null結尾的字符數組。請參閱http://en.cppreference.com/w/cpp/string/basic_string/basic_string中的重載(5)。 – Lingxi