C++ 字符串字符转为16进制

对字符串进行解析并转为16进制

一个简单的字符串解析练习 效果如下图:
C++ 字符串字符转为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;
}

以上就是本项目的主要功能代码,有问题或建议请留言,如需源码请转至:资源中心 关注后即可免费下载。

上一篇:Andrew Stankevich Contest 45 (ASC 45)


下一篇:冒泡排序实现