从字符串行读取每个莫尔斯电码

时间:2012-05-27 09:23:16

标签: c++

嗨我有用空格分隔的字符串morse代码,例如*** --- ***用于SOS。

任何人都可以帮我阅读每个摩尔斯电码吗?

目前我正在阅读每个我需要阅读每个莫尔斯代码的字符,以便我可以将莫尔斯代码作为变量传递给其他返回字母字符的方法。

2 个答案:

答案 0 :(得分:0)

您可以使用strtok对字符串进行标记,并使用空格字符作为分隔符。

答案 1 :(得分:0)

您可以将莫尔斯电码及其等效值存储在地图中, 将莫尔斯字符串拆分为空格,循环遍历这些元素并从地图中检索结果值(并将它们连接在一起)以获得最终结果

这是一个显示已解码的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 ++以来已经有好几年了。希望它会为你带来一些更好的主意。