2017-12-29 6 views
-2

私はC++で与えられた文字列の異なる部分文字列のすべての可能な対を作りたいと思います。私は、次の2つの方法を試してみました: と仮定abfabgabは私の文字列と使用して私のようなサブストリングのペアのすべての可能な組み合わせ見たい力ずくである:abafaaabagabを2回目bfbaのために...等々。C++:この特殊なケースのために文字のペアを文字列にする方法は?

string sbstr; // where s is the string from which I wanna make substrings pair 
    for(unsigned int i=0; i<s.length()-1; ++i) 
    { 
     for(unsigned int j=i+1; j<s.length(); ++j) 
     { 
     sbstr=(char)s[i]+(char)s[j]; 
     cout<<sbstr<<" "; 
     } 
     cout<<endl; 
    } 

私も次のことを試してみましたが、それはいくつかのエラーを示しています

char two[2]; 
    string sbstr; 
    for(unsigned int i=0; i<s.length()-1; ++i) 
    { 
     for(unsigned int j=i+1; j<s.length(); ++j) 
     { 
     two[0]=s.at(i); 
     two[1]=s.at(j); 
     sbstr=two; 
     cout<<sbstr<<" "; 
     } 
     cout<<endl; 
    } 

この時間もガベージ値は、各ストリングの最後にあります。 私はそれを把握するのを助けてください? ありがとうございます。

+0

'(文字)S [i]は+(CHAR)■[J ] 'それらを連結するのではなく、2つの値を追加します。 2番目のバージョンのC配列に ''\ 0''ターミネータがありませんでした。 – mch

+0

'cout << s [i] << s [j];' –

+0

@mchはい、そうです。私はこれを持って – jackyone

答えて

2

エラーはmchによって指摘されました。 C++の文字列に '+'を付けることはできますが、コードスニペットでは文字を使用し、8ビット符号付き整数として追加します。 char配列を使用し、終端の '\ 0'を覚えているか、文字列に '+'を付加した文字列を使用してください。

一つの作業例:

void subStrings(string s) { 
    char sbstr[3]; 
    for (unsigned int i = 0; i < s.length() - 1; ++i) { 
     for (unsigned int j = i + 1; j < s.length(); ++j) { 
      sbstr[0] = (char) s[i]; 
      sbstr[1] = (char) s[j]; 
      sbstr[2] = 0; 
      cout << sbstr << " "; 
     } 
     cout << endl; 
    } 
} 

別:

void subStrings(string s) { 
    string substring = ""; 
    for (unsigned int i = 0; i < s.length() - 1; ++i) { 
     for (unsigned int j = i + 1; j < s.length(); ++j) { 
      substring = ""; 
      substring += (char) s[i]; 
      substring += (char) s[j]; 
      cout << substring << " "; 
     } 
     cout << endl; 
    } 
} 

char型のキャストなし:

void subStrings(string s) { 
    string substring = ""; 
    for (unsigned int i = 0; i < s.length() - 1; ++i) { 
     for (unsigned int j = i + 1; j < s.length(); ++j) { 
      substring = ""; 
      substring = substring + s[i] + s[j] ; 
      cout << substring << " "; 
     } 
     cout << endl; 
    } 
} 
+1

std :: stringはコンストラクタ/ assignを持っています。 – super

+0

私は、最初のブロックを取り除くことを提案したいと思います。文字列を優先してchar配列を避けるべきであることを強調します。なぜあなたが2番目のブロックでそのキャスティングを行うのか分かりません。 – Aziuth

+0

最初の答えは私の要求を満たしています。後で2番目のケースも試してみます。このアイデアの人には感謝しています。 – jackyone

関連する問題