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

代码如下:

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

(0)

相关推荐

  • 用标准c++实现string与各种类型之间的转换

    要实现这个目标,非stringstream类莫属. 这个类在头文件中定义, < sstream>库定义了三种类:istringstream.ostringstream和stringstream,分别用来进行流的输入.输出和输入输出操作.另外,每个类都有一个对应的宽字符集版本. 简单起见,我主要以stringstream为中心,因为每个转换都要涉及到输入和输出操作. 示例1示范怎样使用一个stringstream对象进行从 string到int类型的转换 注意,使用string对象来代替字符数组

  • c++中数字与字符串之间的转换方法(推荐)

    1.字符串数字之间的转换 (1)string --> char * string str("OK"); char * p = str.c_str(); (2)char * -->string char *p = "OK"; string str(p); (3)char * -->CString char *p ="OK"; CString m_Str(p); //或者 CString m_Str; m_Str.Format(&q

  • C字符串与C++字符串的深入理解

    在C中,并没有字符串这个数据类型,而是使用字符数组来保存字符串.C字符串实际上就是一个以null('\0')字符结尾的字符数组,null字符表示字符串的结束.需要注意的是:只有以null字符结尾的字符数组才是C字符串,否则只是一般的C字符数组. C字符串定义时可以利用"="号进行初始化,但是以后不能利用"="对C字符串进行赋值.对C字符串的操作需要通过"string"文件中定义的字符串处理函数.例如://字符串的初始化char a[11] = &

  • C++实现数字转换为十六进制字符串的方法

    本文实例讲述了C++实现数字转换为十六进制字符串的方法.分享给大家供大家参考.具体如下: function toHex(number, min) { var hexes = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']; var hex = ''; var min = min || 2; var nibble; do { nibble = number & 0x0f; number

  • C++多字节字符与宽字节字符相互转换

    最近在C++编程中经常遇到需要多字节字符与宽字节字符相互转换的问题,一直自己贴那几句代码.觉得麻烦,于是就自己写了一个类来封装wchar_t与char类型间的转换,其他的,诸如:CString\ LPWSTR\TCHAR CHAR\LPSTR之间也是一样用 复制代码 代码如下: #include <iostream> using namespace std; class CUser { public: CUser(); virtual~ CUser(); char* WcharToChar(w

  • C++ 将数据转为字符串的几种方法

    收集一下: 1\将int 转为 LPCTSTR 其实LPCTSTR可以直接使用CString直接代替,无需类型强制转换 CString str; int number=15; //str="15" str.Format(_T("%d"),number); //str=" 15"(前面有两个空格:4表示将占用4位,如果数字超过4位将输出所有数字,不会截断) str.Format(_T("%4d"),number); //str=

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

    复制代码 代码如下: //通过不同的方法,实现对所输入字符串的反转,可以很好地复习巩固 C++ 基础知识/*分析过程: 假设要使传递的字符串为常量const字符串,这样操作更加灵活,可直接传递字符串字面值进行反转,常见的解决方法就是,定义一个新的与传递过来字符串长度 相等的字符数组,然后进行字符串拷贝,把str字符按从左到右放置到字符数组中,然后采用循环来对字符数组中字符反转*//*第一种,采用以上思路解法,传递为const类型C风格字符指针,返回为char*类型*///直接使用字符数组赋值ch

  • Android实现定时器的五种方法实例详解

    一.Timer Timer是Android直接启动定时器的类,TimerTask是一个子线程,方便处理一些比较复杂耗时的功能逻辑,经常与handler结合使用. 跟handler自身实现的定时器相比,Timer可以做一些复杂的处理,例如,需要对有大量对象的list进行排序,在TimerTask中执行不会阻塞子线程,常常与handler结合使用,在处理完复杂耗时的操作后,通过handler来更新UI界面. timer.schedule(task, delay,period); task: Time

  • Java字符串拼接的五种方法及性能比较分析(从执行100次到90万次)

    目录 > 源代码,供参考 > 测试结果: > 查看源代码,以及简单分析 > 字符串拼接一般使用"+",但是"+"不能满足大批量数据的处理,Java中有以下五种方法处理字符串拼接,各有优缺点,程序开发应选择合适的方法实现. 1. 加号 "+" 2. String contact() 方法 3. StringUtils.join() 方法 4. StringBuffer append() 方法 5. StringBuilder

  • GoLang使goroutine停止的五种方法实例

    目录 1.goroutine停止介绍 2.goroutine停止的5种方法 2.1使用for-range 2.2使用for-select(向退出通道发出退出信号) 2.3使用for-select(关闭退出通道) 2.4使用for-select(关闭多个channel) 2.5使用context包 总结 GoLang之使goroutine停止的5种方法 1.goroutine停止介绍 goroutine是Go语言实现并发编程的利器,简单的一个指令go function就能启动一个goroutine

  • Python字符串拼接的4种方法实例

    目录 1. 算术运算符拼接 (1)+算术运算符 (2) * 算术运算符 2.format方法 3.百分号操作符 4.特殊符号f 附:常见字符串去除空格的方法总结 总结 在程序实际应用中,少不了要进行字符串拼接的操作.下面介绍一下Python语言中四种字符串拼接的方式. 1. 算术运算符拼接 在Python中算术运算符一共有七种种,分别是+.-.*././/.**和%.其中+和*不仅可以用来进行算数计算,也可以用来字符串拼接. (1)+算术运算符 +运算符在Python中可以用作数学计算,例如:

  • nullJavascript中创建对象的五种方法实例

    复制代码 代码如下: <script type="text/javascript"> // 方法一var p0 = new Object();p0.name = "xy";p0.age = 20;p0.sayName = function() { alert(this.name); }p0.showAgeAfterSomeYears = function(year) { return this.age + year };p0.sayName();aler

  • 在asp.NET中字符串替换的五种方法第1/2页

    1:使用String.Replace函数替换,但不支持大小写. 2:正则System.Text.Regex替换,用RegExpOption修改是否支持大小写. 3:在小数据的情况下,使用String.SubString和+可以实现间接替换. 4:导入MicrosoftVisualBasicRunTime(Microsoft.VisualBasic.DLL)使用Strings.Replace速度很快. 5:参照反射Reflector.FileDisassembler配合Strings.Splita

  • JS中判断某个字符串是否包含另一个字符串的五种方法

    String对象的方法 方法一: indexOf()   (推荐) var str = "123" console.log(str.indexOf("2") != -1); // true indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置.如果要检索的字符串值没有出现,则该方法返回 -1. 方法二:match() var str = "123" var reg = RegExp(/3/); if(str.match(reg

  • Python 字符串去除空格的五种方法

    在处理Python代码字符串的时候,我们常会遇到要去除空格的情况,所以就总结了多种方法供大家参考. 1.strip()方法 去除字符串开头或者结尾的空格 str = " Hello world " str.strip() 输出: "Hello world" 2.lstrip()方法 去除字符串开头的空格 str = " Hello world " str.lstrip() 输出: 'Hello world ' 3.rstrip()方法 去除字符串

  • Python格式化输出字符串的五种方法总结

    目录 1. 引言 2. 函数 center() 3. 函数 ljust() 4. 函数 rjust() 5. 函数 zfill() 6. 函数 title() 7. 使用 1. 引言 Python语言有许多优点,常用于不同的领域,如数据科学.web开发.自动化运维等.开发人员在这些技术中选择Python的一个重要原因是Python语法简单,可以节省大家的开发时间. 在本文中,我们将学习如何使用字符串中内置的方法来格式化字符串.闲话少说,我们直接开始吧! 2. 函数 center() 函数cent

随机推荐