2012-03-15 49 views
2

我有一個字符串,然後我想在載體字符串到載體

string a = "N\nT\n"; 

來存儲每一個新的行之後,以在不同的小區。

std::string ss (".V/\n.F/\n.R/\n"); 

for(int i = 0; i< ss.size(); i++) 
{ 
    test1.push_back(ss); 
} 

我想存儲stringvector test1 這是最好的辦法嗎?

+0

不,我想存儲在'串vector test1' – CodersSC 2012-03-15 15:00:44

+0

所以你只是想將字符串拆分成由'\ n''分隔的部分? 'strtok'可以幫助解決這個問題。 (編輯):如果你只是想存儲字符串,你只需要做一次。 – chris 2012-03-15 15:01:52

+2

@chris哦上帝請不要在C++中使用'strtok'。 – 2012-03-15 15:02:52

回答

10

您的代碼無法使用;它會將字符串ss.size()存儲在向量中。

你可能想使用一個字符串流分割字符串:

std::stringstream stream(ss); 
std::string line; 
while (std::getline(stream, line)) { 
    test1.push_back(line); 
} 

注意,換行字符將被丟棄。如果你想保留它,push_back(line + "\n");

+0

如果你正在分拆換行符,那麼這很好。對於任何其他角色,您需要一個不同的解決方案。 – aldo 2012-03-26 04:04:55

+1

@aldo'std :: getline(stream,line,'\ t')',只是爲了給出一個證明你錯誤的例子。 – 2012-03-26 11:47:13

+0

哇,我想我沒有使用'getline'足以實現你可以指定任何你想要的分隔符。謝謝! – aldo 2012-03-26 18:21:45

0

這當然不是最好的方法,因爲它不起作用。這只是將std::stringss.size()實例推入向量中。

您可以使用findsubstr方法對字符串進行分區並將它們推送到數組中。 (不會寫實際的代碼,但可能是一個很好的練習)。

2

如果換行可以然後丟棄你可以使用std::copy()

#include <iostream> 
#include <sstream> 
#include <algorithm> 
#include <iterator> 
#include <string> 
#include <vector> 

int main() 
{ 
    std::string ss(".V/\n.F/\n.R/\n"); 
    std::istringstream in(ss); 
    std::vector<std::string> test1; 

    std::copy(std::istream_iterator<std::string>(in), 
       std::istream_iterator<std::string>(), 
       std::back_inserter(test1)); 

    std::for_each(test1.begin(), 
        test1.end(), 
        [](const std::string& s) 
        { 
         std::cout << s << "\n"; 
        }); 
    return 0; 
} 

輸出:

.V/ 
.F/ 
.R/