嗨,我有用空格分隔的字符串莫尔斯电码,例如 *** --- ***
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++ 已经好几年了。希望它在你身上激发一些更好的想法。