C++中反转字符串

时间:2020-02-23 14:30:03  来源:igfitidea点击:

在许多情况下,我们可能需要在C++编程中反转字符串。
它可能包括仅打印反向字符串。
或者,在某些情况下,可能需要永久性地在其地址处反转字符串。

在本教程中,我们将学习如何完成这两个任务。
那也使用了不同的预定义以及用户定义的函数。

在C++中反转字符串

反转字符串是指对字符串的操作,通过该操作可以反转字符串中的字符序列。
例如,假设" str"中包含字符串" theitroad"。

在对字符串" str"进行反向操作后,内容应反向。
因此," str"现在应包含字符串" veDlanruoJ"。

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

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

C++中内置的反向函数reverse()直接反向字符串。
假定双向的开始和结束迭代器都作为参数传递。

该函数在算法头文件中定义。
下面给出的代码描述了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;
}

使用strrev()

strrev()是C++中的预定义函数,在cstring.h头文件中定义。
它广泛适用于反转任何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;
}

上面的代码很好地说明了函数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循环内,在打印字符串时,请注意,我们已使用值str.length()-1初始化了迭代器" i"。
    这意味着我们从最后一个索引开始逐字符打印字符串。

  • 注意:length()返回字符串的长度。
    因此,对于反向打印字符串,我们应该考虑最后一个索引,该索引应该是" length()-1",因为索引从字符数组中的" 0"开始。

制作我们自己的字符串反转函数My_rev()

到目前为止,我们已经了解了如何反向打印字符串以及如何使用不同的预定义函数反转字符串。
现在让我们创建或者定义我们自己的名为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<<"Reverse string using 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()函数。
    使用cout函数打印字符串的位置。