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;
}
相关文章
- C++学习——类和对象
- C++ STL map集合的使用「建议收藏」
- c语言createthread函数,C++中CreateThread函数创建线程的用法和实例
- c++获取子类窗口句柄位置_C++中各种获取窗口句柄的方法「建议收藏」
- 使用容器快速配置c/c++开发调试环境
- C++中你不知道的namespace和using的用法
- c++的链表-链表入门(C++)
- C/C++ 内存读写Lib库简单封装
- C/C++ 应用层下遍历驱动列表
- 分享C/C++转汇编代码的在线网站
- C++中的标准化工厂—— 模板
- c++基础篇之C++ 模板
- C++ deque获取(访问)元素方法详解
- C++ vector swap()去除多余容量(详解版)
- 调查:Java程序员最伤心,C++程序员最年老
- 用C++实现队列的程序代码
- C/C++语言中结构体的内存分配小例子
- C/C++产生指定范围和不定范围随机数的实例代码
- C/C++判断传入的UTC时间是否当天的实现方法
- C++针对bmp格式解析实例
- C++中I/O模型之select模型实例
- C++实现ping程序实例
- C++实现迷宫算法实例解析
- C++实现简单的希尔排序ShellSort实例
- c++中map的基本用法和嵌套用法实例分析
- C++可变参数的函数与模板实例分析
- C++实现二叉树非递归遍历方法实例总结
- Ruby使用C++扩展实例(含C++扩展代码示例)
- C++中调用Lua函数实例