我正在尝试做一个小任务,要求将数字转换为电话键盘的字母,例如,如果输入是 222,则表示电话按钮“2”(http://upload.wikimedia.org/wikipedia/commons/7/ 7d/Telephone-keypad.png)被按下 3 次,输出应该是“C”等等。所以我首先应该做的是将所有序列,例如 22255-444 分成 222 、 55 、 - 、 444 和然后我想弄清楚一切,但现在的问题是我的函数无法读取最后一个序列
#include <iostream>
#include <fstream>
using namespace std;
//-------------------------------------------------------------------------
void encode(string text, string &result, int &i)
{
char keyboard[10][4] = {
{' ',' ',' ',' '},
{'.','?','!','.'},
{'a','b','c','a'},
{'d','e','f','d'},
{'g','h','i','g'},
{'j','k','l','j'},
{'m','n','o','m'},
{'p','r','q','s'},
{'t','u','v','t'},
{'w','x','y','z'}
};
int j;
for(j = i; j<text.size();j++)
{
if(text[i] != text[j] || j == text.size())
{
result = text.substr(i, j-i);
i = j-1;
break;
}
}
cout << result << endl;
}
int main()
{
ifstream fd("sms.in");
string text;
string result;
getline(fd, text);
for(int i = 0; i<text.size();i++)
{
encode(text, result, i);
}
return 0;
}
作为一个测试,我现在使用这个输入:5552-22-27777,输出应该是 555 2 - 22 - 2 7777,但对我来说它是 555 2 - 22 - 2 2 2 2 2。