2014-01-14 80 views
0

在向量C++的,我有一個字符串,例如: ACTT CTTG TTGA TG TGA GAG,你可以看到,它們疊加串聯串

ACTT 
CTTG 
    TTGA 
    TG 
    GAG 

所以在定位我們可以看到

ACTTGAG 

我想將它們連接起來,就像你上面看到的一樣,然後放到另一個向量中。我試過使用子字符串函數,但它不起作用...

+0

你想建立最短的字符串,每個字符串都是一個子字符串? – StoryTeller

+3

你是什麼意思'它不工作'?我一直使用substr,它對我來說工作正常.. – StevieG

+0

什麼不行?你有什麼嘗試? – Shaz

回答

1

假設您仍然使用與the last question相同的代碼,您可能需要考慮使用元素中第一個索引(it[0])。你可以將這個結果添加到一個字符串並打印出來。

用途:

std::string space = ""; 
std::string result = ""; 
auto end = vec.rend(); 

for(auto it = vec.rbegin(); it != vec.rend(); ++it) { 
    if (it == end - 1) { 
     result += *it; 
    } 
    else { 
     result += it[0]; 
    }   

    std::cout << space << *it << std::endl; 
    space += " "; 
} 
std::cout << result << std::endl; 
+0

是的,但是當我使用子字符串和一些字符串更短我不知道如何連接它們這種方式 – AirelleJab

+0

@AirelleJab更新的答案更好的例子 –

+0

非常感謝,但我還有一個問題 - 我有一個編譯問題,因爲運算符「+ =」沒有匹配結果+ =它,運算符「+」也是不可避免的 – AirelleJab

2

這是一個相當簡單的算法來重疊兩個字符串:

#include <string> 

std::string overlap(std::string first, std::string const & second) 
{ 
    std::size_t pos = 0; 
    for (std::size_t i = 1; i < first.size(); ++i) 
    { 
     if (first.compare(first.size() - i, i, second, 0, i) == 0) 
     { 
      pos = i; 
     } 
    } 
    first.append(second, pos, second.npos); 
    return first; 
} 

用法:

std::string result = overlap("abcde", "defgh"); 

,並交疊的整個範圍,使用std::accumulate

#include <algorithm> 
#include <iostream> 
#include <vector> 

int main() 
{ 
    std::vector<std::string> strings = {"abc", "def", "fegh", "ghq"}; 
    std::cout << std::accumulate(strings.begin(), strings.end(), std::string(), overlap) << std::endl; 
}