逆转字符串

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

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

相关文章

来自专栏Java呓语

第11章、数据类型

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

892
来自专栏Python爬虫实战

MySQL 从零开始:09 计算字段

在数据库中存储公司信息,一般用两个表列分别表示公司名和公司地址。 如果想要在一个字段中既显示公司名,又要显示公司地址,那么就需要对已有字段进行处理了,这个处理过...

622
来自专栏陈树义

PL/SQL基础语法

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

36311
来自专栏数据和云

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

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

3685
来自专栏数据和云

SQL 使用like &#39;%ABC&#39; 和 like &#39;%ABC%&#39;的优

一般情况下,sql中使用col_name like 'ABC%‘的情况才能使用到col_name字段上的索引。那么如果是col_name like '%ABC%...

4558
来自专栏数据分析

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

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

3436
来自专栏青青天空树

mysql-存储过程(转载)

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

1142
来自专栏文渊之博

关于UNPIVOT 操作符

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

17910
来自专栏北京马哥教育

Mysql 架构和索引

字段类型选择 慷慨是不明智的 在相关的表中使用相同的数据类型,因为可能进行join 选择标示符:整数通常是最佳选择,尽量避免使用字符串 大致决定数据类型(数字,...

3409
来自专栏xingoo, 一个梦想做发明家的程序员

Java几种单例模式的实现与利弊

多线程环境下无法保证单例效果,会多次执行 instance=new Singleton(),需要考虑到多线程

2142

扫码关注云+社区