2017-02-09 45 views
1

所以這個背後的想法是,用戶輸入一條消息,並將消息轉換爲莫爾斯碼。這是我在今天工作了8個多小時的家庭作業。這也是我第一次認真對待課堂。比較兩個向量可能會給我一個錯誤

運行時,我在64行只有一個錯誤。我得到的錯誤沒有意義(它是huuuuge所以我不想包括它,除非問)。我懷疑問題是原始消息矢量和alphaCode矢量是不同的矢量類型(字符串分別爲& char)。

#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'或查找表。不知道爲什麼comp sci當然會告訴你解決這個問題的最糟糕的方法,通過線性搜索直到找到正確的代碼。 – 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])

originalMessagevector<string>alphaCodevector<char>

沒有辦法,你可以用一個string

比較

你可能想改變你的函數是這樣的:

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(" "); 
      } 
     } 
    } 
} 

編輯

基本上,我們希望從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

「您無法將字符與字符串進行比較」。有辦法,但它們只在某些情況下才有意義,所以沒有默認方式。你的「修復」幾乎肯定是錯誤的。 「對於第i個字符串,取第i個字符並找到它的莫爾斯電碼映射。」聽起來不太合理。 – luk32

+0

我試過了,循環出現問題。也許我可以創建一個char向量,並將每個元素從originalMessage推回到這個新向量中? –

+0

@ luk32,我沒有提供代碼的邏輯修復,我提供了一個解決方法來理解和擺脫編譯錯誤。如果你注意到,OP正試圖比較'if(originalMessage [i] == alphaCode [j])'。 – Rishi

0

提取char信息你有幾個問題你的源代碼。 第一個問題是消息變量:

vector<string> message; 

可改爲:

string message; 

,改變你的代碼的其他部分,基於這一變化。

第二個問題背朝

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

變量x不initited,initite,或編寫一個更好的循環:

for (const auto& x : finalMessage) cout << x;