逆转字符串

逆转字符串——输入一个字符串,将其逆转并输出

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <string>

using namespace std;

//ANSIC,有中文就出错
//bool ReverseStringA(char* str)
//{
//	int len = strlen(str);
//	unsigned char temp;
//	for (int i = 0; i < len / 2; ++i)
//	{
//		temp = str[i];
//		str[i] = str[len - i - 1];
//		str[len - i - 1] = temp;
//	}
//	return true;
//}

//UNICODE,双字节
bool ReverseStringW(wchar_t* str)
{
	int len = wcslen(str);
	wchar_t temp;
	for (int i = 0; i < len / 2; ++i)
	{
		temp = str[i];
		str[i] = str[len - i - 1];
		str[len - i - 1] = temp;
	}
	return true;
}

bool ReverseString(char* str)
{
	const char* local = setlocale(LC_ALL, NULL);//返回当前本地化,setlocale(LC_ALL,"")才是使用默认本地化
	char* setlocal = setlocale(LC_ALL, "chs");

	int len = mbstowcs(NULL, str, NULL);
	wchar_t* buf = new wchar_t[len + 1];
	wmemset(buf, 0, len + 1);
	int change = mbstowcs(buf, str, len+1);
	if (change == len)
	{
		if (!ReverseStringW(buf))
		{
			goto ERROR;
		}
		change = wcstombs(NULL, buf, NULL);
		change = wcstombs(str, buf, change + 1);
		delete []buf;
		setlocal = setlocale(LC_ALL, "");
		return true;
	}

ERROR:
	delete[]buf;
	setlocal = setlocale(LC_ALL, "");
	return false;
}

int main(int argc, char* argv[])
{
	//char* str = "abcde";//代码区
	//char str[] = "abcde";
	char str[] = "含有中文abc";
	//wchar_t* str = L"含有中文abc";//代码区,又犯了!
	//wchar_t str[] = L"含有中文abc";

	//std::locale loc("");
	//std::wcout.imbue(loc);
	if (ReverseString(str))
		cout << str << endl;
		//wcout << buf << endl;

	system("pause");
	return 0;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互联网开发者交流社区

用于 SELECT 和 WHERE 子句的函数

933
来自专栏程序猿

SQL优化法则小记

SQL优化技巧 1.选择最有效率的表名顺序(只在基于规则的优化器中有效): oracle的解析器按照从右到左的顺序处理 from 子句中的表名,...

3499
来自专栏坚毅的PHP

mysql数据迁移hbase问题

无法直接dump,写了java多线程程序做迁移 问题1:Operation not allowed after ResultSet closed 裸jdbc语句...

3465
来自专栏用户2442861的专栏

【剑指offer】八皇后问题

转载请注明出处:http://blog.csdn.net/ns_code/article/details/26614999

491
来自专栏小筱月

SSM框架的sql中参数注入(#和$的区别)

ORDER BY ${order} 和模糊查询 username LIKE '%${username}%' 是用$符号,其他的大多是用 #{} 来获取传递的参数...

712
来自专栏Hongten

sql之left join、right join、inner join的区别

Please refer the link : https://www.codeproject.com/Articles/33052/Visual-Repres...

443
来自专栏mukekeheart的iOS之旅

数据库操作要点知识整理

第一课:客户端         1. Sql Plus(客户端),命令行直接输入:sqlplus,然后按提示输入用户名,密码。         2. 从开始...

2199
来自专栏数据和云

深入剖析:认识Oracle 中的 NULL 值

杨廷琨,网名 yangtingkun 云和恩墨技术总监,Oracle ACE Director,ACOUG 核心专家 经常看到很多人提出和NULL有关的问题。N...

2585
来自专栏Java Edge

二分查找复杂度分析

2855
来自专栏Java成神之路

Oracle学习笔记_02_基本SQL

        SQL 语言大小写不敏感。         SQL 可以写在一行或者多行 关键字不能被缩写也不能分行         各子句一般要分行写。 ...

672

扫描关注云+社区