2016-04-15 22 views
0

文字列の2つのインデックスを再帰的に交換しようとしていますが、セグメント化エラーが発生しています。私がどこに間違っているのか誰にでも教えてもらえますか?これは、すべての3つの引数を取るvoid関数である言葉(文字列)、および再帰的な文字列のスワップ

int count = 0; 
if(words.length() == 0) 
    return; 


if(words.length() < last) 
    return; 
if(words[first] > words[last]) 
    return; 

if(words.at(first + 1)){ 
    words[first] = words[last + count]; 
    reverseit(words, first, last); 
} 
if(words.length() >= last){ 
    words[last - 1] = words[last]; 
    words[last] = words[last -1]; 
// words[first + 1] = words[first]; 
// words[first] = words[first +1]; 
    count++; 
    reverseit(words, first, last); 
} 
+0

をStackOverflowのへようこそ。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)がここに適用されます。コードを投稿して問題を正確に記述するまでは、効果的にお手伝いすることはできません。この場合、ドライバプログラムと完全なエラーメッセージを取得する必要があります。 "seg faultを得る"というのは標準に達していない。 – Prune

答えて

0

を交換する位置として最初と最後の私はあなたの関数がいずれかから行うことになっているかを把握することができませんでしよあなたの説明またはあなたのコード。ここに私の最高の推測だ - それは間違っている場合は、あなたの質問には、それに応じてアップデートしてください:

#include <string> 
#include <iostream> 

void reverseit(std::string &words, size_t first, size_t last) { 

    size_t length = words.length(); 

    if (length == 0 || last > length || first >= last) { 
     return; 
    } 

    char temp = words[last]; 
    words[last] = words[first]; 
    words[first] = temp; 

    reverseit(words, first + 1, last - 1); 
} 

int main(int argc, char *argv[]) { 

    std::string str = "abcdefghijklmnopqrstuvwxyz"; 

    reverseit(str, 6, 18); 

    std::cout << str << std::endl; 

    return 0; 
} 

が生成されます

> ./a.out 
abcdefsrqponmlkjihgtuvwxyz 
> 
関連する問題