zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C++字符串的反转五种方法实例

C++实例方法 字符串 反转 五种
2023-06-13 09:15:05 时间
复制代码代码如下:

//通过不同的方法,实现对所输入字符串的反转,可以很好地复习巩固C++基础知识
/*分析过程:
  假设要使传递的字符串为常量const字符串,这样操作更加灵活,可直接传递字符串字面值进行反转,常见的解决方法就是,定义一个新的与传递过来字符串长度
  相等的字符数组,然后进行字符串拷贝,把str字符按从左到右放置到字符数组中,然后采用循环来对字符数组中字符反转
*/
/*第一种,采用以上思路解法,传递为const类型C风格字符指针,返回为char*类型*/
//直接使用字符数组赋值
char*strrev1(constchar*str)
{
   constsize_tlength=strlen(str);//求字符长度
   char*temp=newchar[length];//新建一个等长度的字符数组
   strcpy(temp,str);//字符串拷贝
   for(size_ti=0;i<=length/2;++i)//对字符数组中的字符反转,循环执行条件为标识小于或等于字符长度一半
   {
     charc=temp[i];
     temp[i]=temp[length-i-1];
     temp[length-i-1]=c;
   }
   returntemp;//返回反转后的字符
}
//采用指针操作方式
char*strrev2(constchar*str)
{
   char*tmp=newchar[strlen(str)];
   strcpy(tmp,str);
   char*ret=tmp;//用来最后返回数组指针
   char*p=tmp+strlen(str)-1;
   while(p>tmp) 
   { 
     chart=*tmp; 
     *tmp++=*p; 
     *p--=t;
  }
   returnret;
}
//与上一函数基本相似,只不过本函数使用是移位操作改变字符指针指向
char*strrev3(constchar*str)
{
   char*tmp=newchar[strlen(str)+1];
   strcpy(tmp,str);
   char*ret=tmp;
   char*p=tmp+strlen(str)-1;
   while(p>tmp) 
  { 
     *p^=*tmp;
     *tmp++^=*p;          
     *p--^=*tmp;
   }
   returnret;
}
//节省几步,直接给新建的字符数组赋反转的值,呵呵,简单明了,只不过循环多执行几次
char*strrev4(constchar*str)
{
   char*temp=newchar[strlen(str)];
   for(inti=0;i<=strlen(str);i++)
   {
     temp[i]=str[strlen(str)-i-1];
   }
  returntemp;
}
//使用递归进行字符反转,网上看的,不过感觉不好,限制太多
//(不能直接反转常量字符串,因为没有定义新的字符数组,而是在原数组上直接进行字符反转,节省空间,提高效率,还要传递字符长度,增加限制,但总归是个思路)
char*strrev5(char*str,intlen)
{
   if(len<=1)
     returnstr;
   chart=*str;
   *str=*(str+len-1);
   *(str+len-1)=t;
   return(strrev5(str+1,len-2)-1);
}
/*如果传递是std::string类型字符串且是const的!!
  返回类型为std::string
*/
std::stringstrrev6(conststd::stringstr)
{
  stringr;//定义一个新的字符串变量,用来接收
  stringr;
   for(inti=0;i<str.length();++i)
   {
     r=str[i]+r;//注意顺序
   }
  returnr;
}
/*如果传递是std::string类型字符串,但不是const的!!
  返回类型为std::string,那你将不必再定义一个新的字符串变量
  节省空间,注意:string类型可以直接接受字符串字面值就是啦..
*/
std::stringstrrev6(std::stringstr)
{
  for(inti=0;i<=str.length()/2;++i)
   {
     charc=str[i];
     str[i]=str[str.length()-i-1];
     str[str.length()-i-1]=c;
     }
   returnstr;
}