2016-10-30 13 views
-3

次のタスクを実行するように指示された割り当てがあります。 "文字列を入力させてから、文字列の最初の文字を表示し、最後に2番目、最後に2番目、最後に3番目...だから、文字列が "abcdef"の場合、それは表示されます: afbecd(入力 "abcdef") " 私のアプローチですが、走る私の関数printLetters(文字列s)では12345、私は、その後、私はその後、完全な文字列12345を持って、インデックス0から始まる文字列をプリントアウト:私はexmapleです。ここ11に文字列mash(recursion)C++

#include <iostream> 
#include <cmath> 
using namespace std; 

void printLetters(string s); 

int main() 
{ 
    string sequence; 
    cout << "Enter a sequence: "; 
    getline(cin, sequence); 
    printLetters(sequence); 
} 

void printLetters(string s) 
{ 
    int a = floor(s.length()/2.0); 
    // stopping case 
    if(s == "") 
    { 
    return; 
    } 

    // reduce problem 
    printLetters(s.substr(0)); 
    //cout << s[0]; 
    cout << s[a]; 
} 

をセグメンテーションフォールトを得ましたインデックスs.length()/ 2の中文字 "3"のコンテンツを "取り出す"。その後、文字列に戻り、インデックス0から始まる部分文字列を再び印刷しますが、今度は1245です。私が1になるまで手順を繰り返しています。講義では、私の教授は再帰がプロセスは、それは底から背中に戻って上に戻るでしょう。それから私が1に達すると、それは5,2,3,4に戻るでしょう。だから私は文字列 "15234"を印刷すると仮定しますが、私はしませんでした。あなたは何か考えているなら、私は聞いてうれしいです。どうもありがとう!

これは、文字列を逆にするために使用される別のコードです。私の教授はクラスで説明しました。それは彼がコードの背後に与えた論理でした。すべての

#include <iostream> 
    using namespace std; 
    void printString(string s); 
    int main() 
    { 
    printString("hello"); 
    return 0; 
    } 
    void printString(string s) 
    { 
     if(s == "") 
     { 
     return; 
     } 
     printString(s.substr(1)); 
     cout << s[0]; 
    } 
+0

'floor(s.length()/ 2.0)'は 's.length()/ 2'としてよく書かれています。 – melpomene

+0

あなたはどういう意味ですか?「今回は1245 *です。 's.substr(0)'は 's 'であり、' 12345'です。 – melpomene

+0

最初にデバッガを使用してみてください... – Jepessen

答えて

-1

この1

#include <iostream> 
#include <string> 
using namespace std; 

void printLetters(string s); 

int main() 
{ 
string sequence; 
cout << "Enter a sequence: "; 
getline(cin, sequence); 
printLetters(sequence); 
cout << endl; 
system("pause"); 
} 

void printLetters(string s) 
{ 
int a =s.length(); 
if (a == 0) 
{ 
    return; 
} 
cout << s[0]; 
if(a>1) 
cout<< s[a - 1]; 
s.erase(0, 1); 
a = s.length(); 
if(a>1) 
s.erase(a-1); 
printLetters(s); 
} 

を試してみてはありがとうございました。それは完全に動作します。システムが必要だと思いますか(「一時停止」)?私はコードにそれを含めなかったので、それはまだ動いていました。私はあなたのコードの背後にある論理を完全に理解していました。本当にありがとう。

+0

いいえ、それは必須ではありません。どのコンパイラを使用しているかによって異なります。 – suleman

-1

まずあなたは、文字列のライブラリー

#include <string> 

感謝を含める必要があります。申し訳ありませんが、私はコメントできません。