2017-02-09 3 views
1

これは、ユーザーがメッセージを入力し、メッセージがモールス符号に変換されるという考え方です。私は今日8時間以上働いている宿題です。クラスで真剣に取り組んでいるのは初めてのことです。2つのベクトルを比較するとエラーが出る可能性があります

実行時には、64行目に1つのエラーしか表示されません。エラーが表示されても意味がありません(尋ねられない限り、huuuugeなので含める必要はありません)。私は、originalMessageベクトルとalphaCodeベクトルが異なるベクトル型(文字列&それぞれ)であることが問題であると考えています。

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

class Code 
{ 
    private: 
     vector<char> alphaCode; 
     vector<string> morseCode; 
     vector<string> originalMessage; 
     vector<string> finalMessage; 
    public: 
     Code(); 
     void encoder(vector<string> input); 
     void display(); 
}; 

Code::Code():alphaCode(), morseCode(28) 
{ 
    //Building alphaCode 
    for (char c='A'; c<='Z'; c++) alphaCode.push_back(c); 
    alphaCode.push_back(' '); 
    alphaCode.push_back('.'); 

    //Building morseCode 
    morseCode[0] =".-"; 
    morseCode[1] ="-..."; 
    morseCode[2] ="-.-."; 
    morseCode[3] ="-.."; 
    morseCode[4] ="."; 
    morseCode[5] ="..-."; 
    morseCode[6] ="--."; 
    morseCode[7] ="...."; 
    morseCode[8] =".."; 
    morseCode[9] =".---"; 
    morseCode[10] ="-.-"; 
    morseCode[11] =".-.."; 
    morseCode[12] ="--"; 
    morseCode[13] ="-."; 
    morseCode[14] ="---"; 
    morseCode[15] =".--."; 
    morseCode[16] ="--.--"; 
    morseCode[17] =".-."; 
    morseCode[18] ="..."; 
    morseCode[19] ="-"; 
    morseCode[20] ="..-"; 
    morseCode[21] ="...-"; 
    morseCode[22] =".--"; 
    morseCode[23] ="-..-"; 
    morseCode[24] ="-.--"; 
    morseCode[25] ="--.."; 
    morseCode[26] ="......."; 
    morseCode[27] ="x"; 
} 

void Code::encoder(vector<string> input) 
{ 
    originalMessage = input; 
    for (int i = 0; i < originalMessage.size(); i++) 
    { 
     for (int j = 0; j < alphaCode.size(); j++) 
     { 
      if (originalMessage[i] == alphaCode[j]) 
      { 
       finalMessage.push_back(morseCode[j]); 
       finalMessage.push_back(" "); 
      } 
     } 
    } 
} 

void Code::display() 
{ 
    for (int x; x < finalMessage.size(); x++) cout << finalMessage[x]; 
} 

//------------------------------------------------------------------------------ 

int main() 
{ 
    vector<string> message; 
    string temp; 

    cout << "Input:" << endl; 
    cin >> temp; 
    message.push_back(temp); 

    Code c1; 
    c1.encoder(message); 
    c1.display(); 

} 
+0

あなたはそれを考え出しました。質問は何ですか?あなたはタイプを混合し、文字列全体を文字と比較しています。これはC++では意味をなさない。 – luk32

+0

申し訳ありませんが、私はまだ初心者です。基本的にこれは割り当てです:http://cse.csusb.edu/murphy/cse202/hw2-2014.html これは少し重いです。 –

+0

@SriniKumar - FWIW、この問題を解決するより良い方法は、 'std :: map'またはルックアップテーブルを使うことです。なぜあなたが正しいコードを見つけるまで線形検索を行うことによって、この問題を解決する最悪の方法を示しているのだろうか? – PaulMcKenzie

答えて

-2

エラーメッセージをお読みください:

prog.cpp:64:36: error: no match for 'operator==' (operand types are 'std::basic_string' and 'char') if (originalMessage[i] == alphaCode[j])

if (originalMessage[i] == alphaCode[j])

originalMessageですが、あなたがstring

charを比較することができます方法はありません vector<char>

あるvector<string>alphaCodeながら、

あなたはこの方法であなたの機能を変更することがあります。

void Code::encoder(vector<string> input) 
{ 
    originalMessage = input; 
    for (int i = 0; i < originalMessage.size(); i++) 
    { 
     string i_string = originalMessage[i]; // get the string here 
     for (int j = 0; j < alphaCode.size(); j++) 
     { 

      if (i_string.at(i) == alphaCode[j]) // get the char in string 
      { 
       finalMessage.push_back(morseCode[j]); 
       finalMessage.push_back(" "); 
      } 
     } 
    } 
} 

EDIT

は基本的に、我々はstring

for (int i = 0; i < originalMessage.size(); i++) { 
    string i_string = originalMessage[i]; 
    for (int j =0; i < i_string.size(); j++) { 
     char at_j = i_string.at(j); 
     // find this at_j in alphaCode 
     // enncode 
    } 
} 
+0

"文字と文字列を比較する方法はありません"。方法はありますが、特定のコンテキストでのみ意味がありますので、デフォルトの方法はありません。あなたの "修正"はほぼ確実に間違っています。 msgstr "" "i番目の文字列に対しては、i番目の文字をとり、それに対するモールスコードのマッピングを探します。"あまりにも妥当に聞こえません。 – luk32

+0

私はそれを試してみましたが、ループに問題があります。たぶん私は、charベクトルを作成し、originalMessageから各要素をこの新しいベクトルにプッシュバックすることができますか? –

+0

@ luk32、私はコードの論理的な修正を提供していない、私は理解するために回避策を提供し、コンパイルエラーを取り除く。あなたが気付いた場合、OPは 'if(originalMessage [i] == alphaCode [j])'を比較しようとしています。 – Rishi

0

からchar情報を抽出したいあなたには、問題のカップルを持っていますあなたのソースコード。 は、最初の問題は、メッセージの変数です:

vector<string> message; 

に変更することでした:

string message; 

そして、この変化に基づいて、あなたのコードの他の部分を、変更します。

第二の問題、変数xがinititedされていない

for (int x; x < finalMessage.size(); x++) cout << finalMessage[x]; 

にバックアップし、それをinititeか、このような優れたループを書く:

for (const auto& x : finalMessage) cout << x; 
関連する問題