掌握C++字符串反转:从基础到高级技巧

在C++编程中,我们经常需要翻转字符串。这可能仅涉及打印反转后的字符串,或者在某些情况下需要永久性地修改字符串内容。

本教程将介绍如何使用不同的预定义函数和用户自定义函数来完成这两种操作。

在C++中反转字符串

字符串反转是一种操作,通过该操作,字符串中的字符顺序被颠倒。例如,考虑一个包含字符串”JournalDev”的字符串变量’str’。

对字符串”str”进行反转操作后,其内容将被颠倒。因此,”str”现在应包含字符串”veDlanruoJ”。

现在让我们看看如何使用多种技术来对C++字符串执行反转操作。

在C++中使用reverse()函数

在C++中,内置的reverse()函数可以直接反转字符串。只需传递双向迭代器begin和end作为参数。

该函数在<algorithm>头文件中定义。下面的代码示例展示了reverse()函数的用法。

#include <algorithm> 
#include<iostream>
#include<string>
using namespace std; 
int main() 
{ 
    string str = "Journal Dev reverse example"; 
    reverse(str.begin(), str.end()); 
	cout<<"\n"<<str; 
    return 0;
}

输出:

Use Of Reverse string in c++

使用strrev()函数

strrev()是C++中的一个预定义函数,定义在<cstring>头文件中。它广泛用于反转任何C风格字符串(字符数组)。

该函数只需要字符串的基地址作为参数,然后按相反顺序翻转字符串。让我们看看如何在C++中使用strrev()函数来反转字符串。

#include<iostream>
#include<cstring>
using namespace std; 
int main() 
{ 
    char str[] ="Journal Dev reverse example"; 
    strrev(str);
	cout<<"\n"<<str; 
    return 0;
}

输出:

Reverse Using Strrev reverse string in C++

上面的代码清晰地展示了strrev()函数的工作原理。对于字符串’str’,该函数成功地将其反转,正如我们在输出结果中所看到的。

以逆序打印字符串

在某些情况下,我们可能不需要更改字符串本身,只需要将其以相反的顺序打印出来。这种情况通常出现在字符串是常量,不能被修改的场景中。我们可以通过使用循环以相反的顺序打印任何字符串。下面让我们看看具体的方法。

#include<iostream>
#include<string>
using namespace std; 
int main() 
{ 
    string str="Journal Dev reverse example"; 
    int i;
    cout<<"Printing string in reverse\n";
    for(i = str.length() - 1; i >= 0; i--)
    {
      	cout<<str[i];
    }
    return 0;
}

输出结果如下:

反向打印示例

  • 在上述代码中,我们首先初始化了一个字符串’str’。
  • 在for循环中打印字符串时,注意我们将迭代器’i’初始化为str.length()-1的值。这意味着我们从最后一个索引开始,逐个字符地打印字符串。
  • 注意:length()函数返回字符串的长度。因此,要反向打印字符串,我们应该考虑最后一个索引,即length()-1,因为在字符数组中索引是从’0’开始的。

编写我们自己的字符串反转函数My_rev()

这是文章《在C++中逆转字符串》的第3部分(共4部分)。

在前面的章节中,我们已经学习了如何使用不同的预定义函数来打印反转字符串以及反转字符串的方法。现在,让我们创建一个名为My_rev()的自定义函数来实现字符串的反转功能。

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
// 自定义字符串反转函数
char *My_rev(char *str)
{
  int i,len=0,n;
  char temp;
  len=strlen(str); // 获取字符串长度
  n=len-1; // 设置最后一个字符的索引
  for(i = 0; i <=(len/2); i++)
  {
    temp=str[i]; // 临时存储当前字符
    str[i]=str[n]; // 将末尾字符放到当前位置
    str[n]=temp; // 将原位置的字符放到末尾
    n--; // 移动到前一个字符
  }
  return str; // 返回反转后的字符串
}
int main()
{ 
    char My_string[]="Journal Dev reverse example"; // 定义要反转的字符串
	cout<<"使用My_rev()函数反转字符串...\n"; // 输出提示信息
    My_rev(My_string); // 调用自定义反转函数
	cout<<My_string; // 输出反转后的字符串
    return 0;
}

输出结果:

自定义My_rev()函数的输出结果
  • 在上面的代码中,My_rev()是一个用于逆转字符串的函数,它接收字符串的基地址作为参数。
  • 在My_rev()函数内部,*str是一个存储所提供字符串基地址的指针。在我们的例子中,str指向字符串My_string的第一个元素。
  • len存储字符串的长度。而n是最后一个元素的索引。
  • 在函数中,我们尝试从两端交换字符串的各个字符。这意味着我们持续交换第0个和第n个索引处的元素,直到到达(len/2)的位置。在上面的代码中,for循环为我们执行这种交换,从而技术上实现了字符串的逆转。
  • 最后,我们将基地址str返回给main()函数。在main()函数中,使用cout函数打印该字符串。

参考文献

  • https://stackoverflow.com/questions/198199/how-do-you-reverse-a-string-in-place-in-c-or-c
  • /community/tutorials/string-length-in-c-plus-plus
bannerAds