-4

ユーザー入力文字を変更するにはどうすればよいですか。「abcDEF」を実行し、atoiまたはstringstreamを使用せずに出力「222333」を返します

2がabcに等しい従来のSMSの考え方を使用すると、3はdefに等しく、4はghiに等しいなどです。

4

2 に答える 2

2

ルックアップ キー マップを使用して、文字列を変換できます。C++11 ラムダと C++03 のサンプル:

static std::map<char, char> keyMap;

struct GetKey
{
  char operator()(char c)
  {
      return keyMap[c];
  } 
};

void InitKeyMap(std::map<char, char>& keys)
{
  keys['a'] = '2';
  keys['b'] = '2';
  keys['c'] = '2';
  keys['D'] = '3';
  keys['E'] = '3';
  keys['F'] = '3';
}

int main ()
{ 
  InitKeyMap(keyMap);
  std::string s1 = "abcDEF";

  // C++11 with lambda
  std::transform(s1.begin(), s1.end(), s1.begin(),
  [](const char c)->char{  return keyMap[c];});

  // C++03 
  std::transform(s1.begin(), s1.end(), s1.begin(), GetKey());

  cout << s1 << std::endl;

  return 0 ;
}
于 2013-01-27T09:46:20.290 に答える
0

たとえば、各文字を数字にマップするテーブルを保持できます。

#include <iostream>
#include <string>

std::string convert(const std::string& map, const std::string& input)
{
    std::string output(input.size(), '0');

    for (int i=0; i < input.size(); i++)
    {
        output[i] = map[input[i]];
    }
    return output;
}

int main(int argc, char* argv[])
{
    std::string charMap(128, '0');
    // init table
    charMap['a']='2';
    charMap['A']='2';
    charMap['b']='2';
    // init all values ...

    std::string input("aAb");
    std::string result(convert(mapping, input));
    std::cout << result << std::endl;

    return 0;
}

編集

この回答の最初の意図は、オペレーターに LUT を使用する基本的なアイデアを提供し、彼の問題に対する簡単な (技術的に正しい) 解決策を提供することでした。私はすべての厳しいコメントを期待していませんでした。私は解決策をもう少し C++ に変更し、C を減らすように変更しました。C++ には、この問題を解決する方法やメカニズムが他にもあることは明らかです。

于 2013-01-27T09:36:28.150 に答える