逆转字符串

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

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

相关文章

来自专栏Hongten

java开发_org.apache.commons.lang.StringUtils工具类源码

http://www.cnblogs.com/hongten/archive/2012/11/08/java_null.html

614
来自专栏chenssy

【死磕Sharding-jdbc】---SQL解析-INSERT解析

分析insert解析之前,首先看一下mysql官方对insert语法的定义,因为SQL解析跟语法息息相关:

832
来自专栏PHP技术

Mysql全文搜索match against的用法

全文检索在 MySQL 中就是一个 FULLTEXT 类型索引。FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE 时或之后使...

2866
来自专栏数说戏聊

04-06章 过滤数据第4章 过滤数据第5章 高级数据过滤第6章 用通配符进行过滤

分析 这条语句从 products 表中检索两个列,但不返回所有行,只返回 prod_price 值为 3.49 的行,输出:

461
来自专栏乐沙弥的世界

PL/SQL --> 游标

映射在结果集中某一行数据的具体位置,类似于C语言中的指针。即通过游标方式定位到结果集中某个特定的行,然后根据业务需求

562
来自专栏JMCui

SQL优化一(SQL使用技巧)

1、行列转换:   decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值);   select decode(sign(变量1-变量...

3403
来自专栏C/C++基础

MySQL存储过程

可惜啊!MySQL目前并不支持在SQL语句中存在流控制语句,例如上面的IF NOT EXISTS THEN END IF;让人痛心疾首。但是我们可以使用存储过程...

601
来自专栏乐沙弥的世界

PL/SQL --> 语言基础

PL/SQL是过程化的SQL语言,是ORACLE对SQL语言的扩展,在普通SQL语句的基础上增加了编程语言的特点。使得该语言不仅具有过程编程语

843
来自专栏维C果糖

史上最简单的 MySQL 教程(五)「SQL 基本操作 之 表操作」

根据操作对象的不同,咱们可以将 SQL 的基本操作分为三类,分别为:库操作、表(字段)操作和数据操作。

32313
来自专栏文渊之博

关于UNPIVOT 操作符

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

17110

扫码关注云+社区