如何更改用户输入字符,例如。"abcDEF" 并在不使用 atoi 或 stringstream 的情况下返回输出 "222333"
使用传统的 SMS 思想,其中 2 等于 abc 3 等于 def 4 等于 ghi 等等。
如何更改用户输入字符,例如。"abcDEF" 并在不使用 atoi 或 stringstream 的情况下返回输出 "222333"
使用传统的 SMS 思想,其中 2 等于 abc 3 等于 def 4 等于 ghi 等等。
您可以使用查找键映射然后转换您的字符串。带有 C++11 lambda 和 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 ;
}
您可以保存一个表格,将每个字母映射到一个数字,例如:
#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++ 中显然有更多的方法和其他机制来解决这个问题。