• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++言語、国際符号翻訳プログラムについて)

C++言語、国際符号翻訳プログラムについて

このQ&Aのポイント
  • C++言語で英文や英単語を国際符号(モールス信号)に変換するプログラムを書いています。
  • ユーザーが2つの英単語を入力し、単語がスペースで離れている場合に、モールス信号の間にスペースを挿入したいという問題に取り組んでいます。
  • 現在のプログラムでは、単語の間にスペースが1つしか挿入されていません。希望通りの結果を得るためにはどのように変更すればよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.3

ああ失礼、修正後の方のコードの変更点を演算子しか見てませんでした。 確かに修正後の方は "CQ DE SHIN" を正しく変換してくれますね。 じゃあ、" SOS" や "SOS "はどう変換されるべきとお考えで、それはその通りになりますか? また、spacesbtwletters はその名の通り「文字の間の空白」という役目を果たしていますか?

その他の回答 (2)

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.2

> 何とか、希望通りにできましたが へぁ、じゃあ "CQ DE SHIN" って入力したらどうなります? 修正のヒント : engtomol() の中で変化しないはずの変数の宣言に const を追加してみましょう。

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

んーと、自分なら std::map か文字と符号のペアクラスの配列を使って空白を特別扱いしないけど、とりあえず if (text[k]==' ') { morsevalue+spacesbtwwords; } では morsevalue は何も変わらない。 まあ、これを直しても本当にこのコードの通りなら他の問題があるんだけど、それは上を直してのお楽しみという事で。

shin_509
質問者

補足

hitomuraさん、 ご回答ありがとうございます。 何とか、希望通りにできましたが、今度はモールスを逆に英文(または英字、英単語)に変換したいのですが、自分の書いたコードだと"AAA"しか出てきません。どの様にコードを書き換えたらよいでしょうか? #include <iostream> #include <string> #include <cctype> using namespace std; string engtomol (string, string[]); string moltoeng (string, char[]); int main () { char alpha[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; string morse[81] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."}; string text, morsecode; char choice; char repeat='y'; while (repeat=='y') { cout << "Select 1 to decode Morse code to English text.\nSelect 2 to decode English text to Morse code" << endl; cin >> choice; if (choice=='1') { cout << "NOTE. DO NOT INPUT A NON ENGLISH CHARACTER. THIS TRANSLATOR EXCLUSIVELY TRANSLATES ENGLISH TEXTS (CAPITALIZED AND NON CAPITALIZED).\n"; cout << "Enter a text to translate, each word seperated by a space if you want to translate more than one word: "; cin.get(); getline(cin,text); cout << "TEXT: " << text << endl; cout << "MORSE CODE: " << engtomol(text, morse) << endl; } else if (choice=='2') { cout << "Enter a morsecode to translate, each letter code seperated by a space. If you want to translate more than one word, have 3 spaces between each word (for example, ... --- ... ... --- ...): "; cin.get(); getline(cin,morsecode); cout << "MORSECODE: " << morsecode << endl; cout << "TEXT: " << moltoeng (morsecode, alpha) << endl; } cout << "Would you like to continue? Press y to repeat. Press any other key to exit. "; cin >> repeat; } return 0; } string engtomol (string text, string morse[]) { int textlength = text.length(); string morsevalue; string spacesbtwletters= " "; string spacesbtwwords = " ";//2 spaces because im going to add it with spacesbtwletters so that it will = 3 for (int k=0; k<textlength; k++) { if (text[k]!= ' ') //if the word(s) did not encounter a space { text[k]=toupper(text[k]); //upper case letters and lower case letters are the same hence have the same appropriate morse code. morsevalue=spacesbtwletters+=morse[text[k]-'A']+" ";//A is the first value of the array. by subtracting its finding the appropriate morse code for each letters } if (text[k]==' ') { spacesbtwletters+=spacesbtwwords;//adds 3 spaces when there is a space between words } } return morsevalue; } string moltoeng (string morsecode, char alpha[]) { int morselength = morsecode.length(); string tran; string spacesbtwletters= " "; string spacesbtwwords = " "; for (int k=0; morsecode[k]; k++) { if (morsecode[k]!= ' ') //if the word(s) did not encounter a space { tran=spacesbtwletters+=alpha[morsecode[k]-morsecode[1]];//A is the first value of the array. by subtracting its finding the appropriate morse code for each letters } } return tran; } 現在あるコードです。逆の場合はモールス信号を入力した場合、文字同士の間には1スペースを、単語同士の間には3スペース、入力し、変換した英文は、英単語同士の間だけに1スペース開ける様に出力したいのですが(... --- ...   ... --- ...を SOS(もしくはsos) SOS等) 長文で申し訳ありませんが、どうかアドバイスをよろしく御願い致します。

関連するQ&A