逆转字符串

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

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

相关文章

来自专栏AhDung

【SQL】sql版Split函数。用于拆分字符串为单列表格

功能与.net版string.Split函数类似,只不过.net返回的是数组,这个返回的是一个单列表格,每个拆分出来的子串占一行。可选是否移除空格子串和重复项。...

773
来自专栏WindCoder

Mybatis问题:There is no getter for property named ‘stype’ in ‘class java.lang.Integer’

在做一个查询时,传的参数是个Integer类型的变量,而不是键值对式的,同时在xml中对其进行了判断。代码如下:

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

单例模式

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

1919
来自专栏Java呓语

第11章、数据类型

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

852
来自专栏数据分析

[数据库基础]——索引详解

索引对于接触过数据库的人,都不会很陌生,但是说实话,也不一定很熟悉。先来介绍下索引的优点。 提高性能 现在有一个数据库表[Words],有[WordID],[W...

3406
来自专栏CaiRui

SQLAlchemy外键的使用

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

2455
来自专栏青青天空树

mysql-存储过程(转载)

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

992
来自专栏技术专栏

SQL 编写技巧总结(持续更新中)

参考 http://blog.csdn.net/bitcarmanlee/article/details/51926530

1503
来自专栏编程心路

SSH框架之旅-hibernate(3)

表 A 中的一条记录只能和表 B 的一条记录,反之亦然。这种关系的表并不常见,因为既然可以存放在两张表中的数据,也可以用一张表来存放。一对一的表关系用于: 1...

702
来自专栏小筱月

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

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

1192

扫码关注云+社区