在 C/C++ 中反转字符串的不同方法

1,098 阅读1分钟

「这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战

给定一个字符串,编写一个 C/C++ 程序来反转它。

通过交换字符编写自己的反向函数: 一个简单的解决方案是编写我们自己的反向函数来反转C++ 中的字符串。

// 一个简单的 C++ 程序来反转字符串
#include <bits/stdc++.h>
using namespace std;

// 反转字符串的函数
void reverseStr(string& str)
{
	int n = str.length();

	// 从两个角开始交换字符
	for (int i = 0; i < n / 2; i++)
		swap(str[i], str[n - i - 1]);
}

// 驱动程序
int main()
{
	string str = "haiyong";
	reverseStr(str);
	cout << str;
	return 0;
}
  1. 输出 :
gnoyiah
  1.  
  2. 使用内置的“反向”功能:  “算法”头文件中有一个直接的功能可以进行反向操作,可以节省我们在编程时的时间。
// 反转 [begin, end] 中的元素
void reverse (BidirectionalIterator begin, 
BidirectionalIterator end);
//一个快速编写的程序,用于使用 reverse() 反转字符串
#include <bits/stdc++.h>
using namespace std;
int main()
{
	string str = "haiyong";

	// 反向 str[begin..end]
	reverse(str.begin(), str.end());

	cout << str;
	return 0;
}
  1. 输出 :
gnoyiah
  1.  
  2. 只打印反向
// C++程序打印一个字符串的反转
#include <bits/stdc++.h>
using namespace std;

// 反转字符串的函数
void reverse(string str)
{
for (int i=str.length()-1; i>=0; i--)
	cout << str[i];
}

// 驱动程序代码
int main(void)
{
	string s = "haiyong";
	reverse(s);
	return (0);
}
  1. 输出: 
gnoyiah
  1. 获取 const 字符串的反转:
// 获取const字符串反转的C++程序
#include <bits/stdc++.h>
using namespace std;

// 函数反转字符串并返回该字符串的反向字符串指针
char* reverseConstString(char const* str)
{
	// 查找字符串的长度
	int n = strlen(str);

	// 创建动态指针字符数组
	char *rev = new char[n+1];

	// 将字符串复制到 ptr 数组
	strcpy(rev, str);

	// 从两个角开始交换字符
	for (int i=0, j=n-1; i<j; i++,j--)
		swap(rev[i], rev[j]);	
	
	// 反转字符串的返回指针
	return rev;
}

// 驱动程序代码
int main(void)
{
	const char *s = "haiyong";
	printf("%s", reverseConstString(s));
	return (0);
}
  1. 输出:   
gnoyiah
  1. 使用构造函数反向字符串:将反向迭代器传递给构造函数返回一个反向字符串。
// 使用构造函数反转字符串的简单 C++ 程序
#include <bits/stdc++.h>
using namespace std;
int main(){

	string str = "haiyong";

	//反向迭代器的使用
	string rev = string(str.rbegin(),str.rend());

	cout<<rev<<endl;
	return 0;
}
  1. 输出:   
gnoyiah

5.使用临时字符串

// 使用构造函数反转字符串的简单 C++ 程序
#include <bits/stdc++.h>
using namespace std;
int main(){

	string str = "haiyong";
	int n=str.length();
	//存储反向的临时字符串
	string rev;
	for(int i=n-1;i>=0;i--)
	rev.push_back(str[i]);

	cout<<rev<<endl;
	return 0;
}

输出:

gnoyiah