对字符串进行解析并转为16进制
一个简单的字符串解析练习 效果如下图:
思路如下:
1. C++在存储字符时实质上是存储字符的ASC码,既字符的int型即为ASC码。
2. 通过进制转换,得到字符的ASC值(10进制)再转为16进制即可。
步骤:
1. 交互界面,录入字符串
int Ui();//交互界面
int main()
{
int i=1;
while (true)
{
i=Ui();
if (i == 0) return 0;
}
}
int Ui()
{
std::cout << "\n请输入对应的选项进行操作!\n"
<< "\"1\"输入要转换的字符串 \"2\"清空屏幕 \"-1\"退出程序\n";
int select = 0;
std::cin >> select;
//std::cin.clear();更改缓存区状态 (还没搞懂用法)
std::cin.ignore();//清空输入缓存区
switch (select)
{
case 1:
{
std::cout << "请输入要转换的字符串:";
std::string mstring;
std::getline(std::cin,mstring);
DataTransform worker;
worker.insertString(mstring);
worker.show();
mstring.clear();
}
return 1;
case 2:
system("cls");
return 1;
case -1:
return 0;
default:
std::cout << "选择有误请重新输入!" << std::endl;
return 1;
break;
}
}
- 考虑到字符串中可能有空格,故使用getline()函数输入数据
std::getline(std::cin,mstring);
使用getline函数时应确保输入缓存区为空,否则getline将直接从缓存区中读取数据,从而跳过用户输入。
- 缓存区清空
std::cin.ignore();
2. 数据处理
- 字符串长度不固定故采用链表的方式存储结果
void DataTransform::insertString(std::string string)
{
Data *p = resultTable;
for (size_t i = 0; i < string.size(); i++)
{
if (i==0)
{
resultTable->_16= hexadecimal(string[i]);
resultTable->Chars =string[i];
resultTable->next = NULL;
}
else
{
Data *Table = new Data;
p->next=Table;
p = Table;
p->_16 = hexadecimal(string[i]);
p->Chars = string[i];
p->next = NULL;
}
}
}
//转为16进制
std::string DataTransform::hexadecimal(char chars)
{
int ASC = chars;
int i = ASC, j;
std::string result;
std::string str;
while (i)
{
if (i / 16 == 0)
{
if (i < 10)str += i + '0';
else str += m_16[i - 10];
i = 0;
}
else
{
j = i % 16;
if (j < 10)str += j + '0';
else str += m_16[j - 10];
i = i / 16;
}
}
//调整顺序
for (size_t m = str.size() - 1; m + 1 > 0; m--)
{
result += str[m];
}
return result;
}
以上就是本项目的主要功能代码,有问题或建议请留言,如需源码请转至:资源中心 关注后即可免费下载。