怎么用C语言实现汉字字符串的反转?

时间:2021-03-04 20:19:30
比如把字符串“游戏开发”,转为字符串“发开戏游”。
英文的很容易,汉字就不简单了。

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();    
}

#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();    
}