こんにちは、たとえば *** --- ***
SOS の場合、スペースで区切られた文字列のモールス符号があります。
各モールス信号を読むのを手伝ってくれる人はいますか?
今のところ、各モールス符号を読み取る必要がある各文字を読み取っています。これにより、モールス符号を変数として他のメソッドに渡して、アルファベット文字を返すことができます。
こんにちは、たとえば *** --- ***
SOS の場合、スペースで区切られた文字列のモールス符号があります。
各モールス信号を読むのを手伝ってくれる人はいますか?
今のところ、各モールス符号を読み取る必要がある各文字を読み取っています。これにより、モールス符号を変数として他のメソッドに渡して、アルファベット文字を返すことができます。
strtokを使用して文字列をトークン化し、空白文字を区切り文字として使用できます。
モールス符号とそれに相当する値をマップに保存し、モールス文字列をスペースで分割し、これらの要素をループして、マップから結果の値を取得 (およびそれらを連結) して、最終結果を得ることができます。
これは、デコードされた SOS '... --- ...' を示す例です。
#include <string>
#include <cstring>
#include <iostream>
#include <map>
#include <vector>
using namespace std;
vector<string> SplitString (string aString);
vector<string> SplitString (string aString){
vector<string> vec;
char * cstr, *p;
string str = aString;
cstr = new char [str.size()+1];
strcpy (cstr, str.c_str());
p=strtok (cstr," ");
while (p!=NULL){
vec.push_back(p);
p = strtok(NULL," ");
}
delete[] cstr;
return vec;
}
int main(){
map<string,string> m;
m["..."] = "S";
m["---"] = "0";
vector<string> v;
string sentence = "... --- ...";
v = SplitString(sentence);
vector<string>::iterator it;
cout << "Our morse (" << sentence << ") decoded to: ";
for ( it = v.begin() ; it < v.end(); it++ ){
cout << m[*it];
}
cout << endl;
return 0;
}
他のモールス信号を入力してください。時間がかかりすぎました。申し訳ありませんが、SOS はよく知られているので使用しました。:) この例もおそらくあまり良くなく、最適化も推奨もされていません。私が c++ に近づいてから何年も経ちました。しかし、それがあなたの中でより良いアイデアを刺激することを願っています.