逆转字符串

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

#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 条评论
登录 后参与评论

相关文章

来自专栏数据和云

MySQL的前缀索引及Oracle的类似实现

MySQL有一个很有意思的索引类型,叫做前缀索引,它可以给某个文本字段的前面部分单独做索引,从而降低索引的大小。 其实,Oracle也有类似的实现,对于文本,它...

3745
来自专栏小筱月

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

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

1732
来自专栏青青天空树

mysql-存储过程(转载)

转自(http://www.cnblogs.com/exmyth/p/3303470.html)

1302
来自专栏栗霖积跬步之旅

单例模式

定义:   单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象...

1979
来自专栏C#

C#常用的IO操作方法

public class IoHelper { /// <summary> /// 判断文件是否存在 /...

22610
来自专栏Python

索引长度过长 ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

1.发现问题   今天在修改innodb表的某个列的长度时,报如下错误: [html] view plain copy print? alter tab...

6656
来自专栏陈树义

PL/SQL基础语法

有时候我们需要对数据库中的数据进行一些稍微复杂的操作,而且这些操作都是一次性的,用完之后就不再用了。 用存储过程的话就太麻烦,而且浪费,用完了还要去删除。而单个...

37011
来自专栏文渊之博

关于UNPIVOT 操作符

UNPIVOT 操作符说明 简而言之,UNPIVOT操作符就是取得一个行的数据集合,然后把每一行都转换成多个行数据。为了更好地理解,请看下图: ? 图1 从上...

18510
来自专栏Java呓语

第11章、数据类型

关键字 INT 是 INTEGER 的别名,关键字 DEC 和 FIXED 是 DECIMAL的别名。 在 MyISAM/MEMORY/InnoDB和NDB表...

952
来自专栏CaiRui

SQLAlchemy外键的使用

orm可以将数据库存储的数据封装成对象,同时,如果封装的好的话,所有的数据库操作都可以封装到对象中。这样的代码在组织结构上会非常的清晰,并且相对与使用sql语句...

2635

扫码关注云+社区