英文的很容易,汉字就不简单了。
5 个解决方案
#1
一个汉字两个字节,你一次同时交换两个字节就好了嘛
#include<iostream>
using namespace std;
int main()
{
char s[20]="游戏开发";
int i=0,j=strlen(s)-1;
while(i<j)
{
swap(s[i],s[j-1]);
swap(s[i+1],s[j]);
i+=2;
j-=2;
}
cout<<s;
return 0;
}
#2
#include <iostream.h>
/* 逆序输出字符串(带中文),递归方式 */
void reverse(char *str)
{
if ( *str == '\0' ) return;
if ( *str < 0 )
{
reverse( str + 2 );
cout<<*str<<(*(str+1));
}
else
{
reverse( str + 1 );
cout << *str;
}
}
void main()
{
char str[] = "AZaz冬天";
reverse(str);
}
}
#3
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
char * Inverse(const char * pSrc)
{
int len = strlen(pSrc);
if ( len ) {
char * pTarget = new char[len];
unsigned char * p1 = (unsigned char *)pSrc;
char * p2 = pTarget + len - 1;
for ( int i=0; i<len; i++)
{
if ( *p1 <=0x80 )
*p2-- = *p1++;
else {
*p2 -- = p1[1];
*p2 -- = *p1;
p1 += 2;
i++;
}
}
return pTarget;
} else
return NULL;
};
int main()
{
char * pSrc = "This 是一个 C++程序";
char * pT = Inverse(pSrc);
printf("%s", pT);
delete pT;
return 0;
};
#4
//c++实现,跟c差不多
#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
int main()
{
string str,bbb;
//str = "放 bbl上海ss爱r中国abc";
getline(cin,str);
bbb.resize(str.size()); //
for (int i = str.size()-1,j=0,c=0;i>=0;i--){
if (str[i] < 0) {
bbb[j+(++c%2)] = str[i]; //c%2双字节计数器
j+=c%2?0:2; //双字节完成步长2
}else bbb[j++] = str[i];
}
cout<<bbb<<" = "<<str<<endl;
}
#5
/*逆序打印字符串(中文字)
by adengou
本程序在win7中用DEV C++ 5.o编译通过
*/
#include <stdio.h>
int main(void)
{
char m[]="游戏开发",cn[2];
int t,i;
for(t=sizeof m-1 ;t>=2;t=t-2)
/*
sizeof m-1中减1意义是去掉尾字节'\n'
t-2意义是以2个字节的方式读取
*/
{
for(i=0;i<2;i++)
{
*(cn+i)=*(m+t-2+i);
putchar(*(cn+i));
}
}
getchar();
}
by adengou
本程序在win7中用DEV C++ 5.o编译通过
*/
#include <stdio.h>
int main(void)
{
char m[]="游戏开发",cn[2];
int t,i;
for(t=sizeof m-1 ;t>=2;t=t-2)
/*
sizeof m-1中减1意义是去掉尾字节'\n'
t-2意义是以2个字节的方式读取
*/
{
for(i=0;i<2;i++)
{
*(cn+i)=*(m+t-2+i);
putchar(*(cn+i));
}
}
getchar();
}
#1
一个汉字两个字节,你一次同时交换两个字节就好了嘛
#include<iostream>
using namespace std;
int main()
{
char s[20]="游戏开发";
int i=0,j=strlen(s)-1;
while(i<j)
{
swap(s[i],s[j-1]);
swap(s[i+1],s[j]);
i+=2;
j-=2;
}
cout<<s;
return 0;
}
#2
#include <iostream.h>
/* 逆序输出字符串(带中文),递归方式 */
void reverse(char *str)
{
if ( *str == '\0' ) return;
if ( *str < 0 )
{
reverse( str + 2 );
cout<<*str<<(*(str+1));
}
else
{
reverse( str + 1 );
cout << *str;
}
}
void main()
{
char str[] = "AZaz冬天";
reverse(str);
}
}
#3
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
char * Inverse(const char * pSrc)
{
int len = strlen(pSrc);
if ( len ) {
char * pTarget = new char[len];
unsigned char * p1 = (unsigned char *)pSrc;
char * p2 = pTarget + len - 1;
for ( int i=0; i<len; i++)
{
if ( *p1 <=0x80 )
*p2-- = *p1++;
else {
*p2 -- = p1[1];
*p2 -- = *p1;
p1 += 2;
i++;
}
}
return pTarget;
} else
return NULL;
};
int main()
{
char * pSrc = "This 是一个 C++程序";
char * pT = Inverse(pSrc);
printf("%s", pT);
delete pT;
return 0;
};
#4
//c++实现,跟c差不多
#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
int main()
{
string str,bbb;
//str = "放 bbl上海ss爱r中国abc";
getline(cin,str);
bbb.resize(str.size()); //
for (int i = str.size()-1,j=0,c=0;i>=0;i--){
if (str[i] < 0) {
bbb[j+(++c%2)] = str[i]; //c%2双字节计数器
j+=c%2?0:2; //双字节完成步长2
}else bbb[j++] = str[i];
}
cout<<bbb<<" = "<<str<<endl;
}
#5
/*逆序打印字符串(中文字)
by adengou
本程序在win7中用DEV C++ 5.o编译通过
*/
#include <stdio.h>
int main(void)
{
char m[]="游戏开发",cn[2];
int t,i;
for(t=sizeof m-1 ;t>=2;t=t-2)
/*
sizeof m-1中减1意义是去掉尾字节'\n'
t-2意义是以2个字节的方式读取
*/
{
for(i=0;i<2;i++)
{
*(cn+i)=*(m+t-2+i);
putchar(*(cn+i));
}
}
getchar();
}
by adengou
本程序在win7中用DEV C++ 5.o编译通过
*/
#include <stdio.h>
int main(void)
{
char m[]="游戏开发",cn[2];
int t,i;
for(t=sizeof m-1 ;t>=2;t=t-2)
/*
sizeof m-1中减1意义是去掉尾字节'\n'
t-2意义是以2个字节的方式读取
*/
{
for(i=0;i<2;i++)
{
*(cn+i)=*(m+t-2+i);
putchar(*(cn+i));
}
}
getchar();
}