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

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

「这是我参与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



目录
相关文章
|
1月前
|
存储 Java C++
C++ 引用和指针:内存地址、创建方法及应用解析
C++中的引用是现有变量的别名,创建时需用`&`运算符,如`string &meal = food;`。指针存储变量的内存地址,使用`*`创建,如`string* ptr = &food;`。引用必须初始化且不可为空,而指针可初始化为空。引用在函数参数传递和提高效率时有用,指针适用于动态内存分配和复杂数据结构操作。选择使用取决于具体需求。
41 9
|
监控 算法 编译器
C++通过libssh2库获取 SFTP指定文件的最后修改时间的方法
C++通过libssh2库获取 SFTP指定文件的最后修改时间的方法
42 0
|
2月前
|
存储 算法 编译器
【C++ 字符数组的模板特化】面向字符串的C++模板特化:理解与实践
【C++ 字符数组的模板特化】面向字符串的C++模板特化:理解与实践
55 1
|
2月前
|
存储 C++ 索引
C++ 字符串完全指南:学习基础知识到掌握高级应用技巧
C++的字符串使用`string`类处理,如`string greeting = &quot;Hello&quot;`。字符串连接可通过`+`或`append()`函数实现。访问字符使用索引,如`myString[0]`。`length()`或`size()`可获取长度。`getline()`用于读取整行输入。注意转义字符如`\\&quot;`用于在字符串中嵌入双引号。使用`cin`读取字符串时,空格会终止输入,而`getline()`能读取整行。
27 0
|
15天前
|
编解码 JavaScript 前端开发
【专栏】介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例
【4月更文挑战第29天】本文介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例。Base64编码将24位二进制数据转换为32位可打印字符,用“=”作填充。文中展示了各语言的编码解码代码,帮助开发者理解并应用于实际项目。
|
19天前
|
存储 编译器 C语言
C++字符串大小写之for语句
C++字符串大小写之for语句
18 0
|
21天前
|
C++
【C++】std::string 转换成非const类型 char* 的三种方法记录
【C++】std::string 转换成非const类型 char* 的三种方法记录
8 0
|
21天前
|
C++
【代码片段】【C++】获取当前时间戳并生成固定格式字符串
【代码片段】【C++】获取当前时间戳并生成固定格式字符串
15 0
|
26天前
|
数据安全/隐私保护 C++
C++ 类方法解析:内外定义、参数、访问控制与静态方法详解
C++ 中的类方法(成员函数)分为类内定义和类外定义,用于操作类数据。类内定义直接在类中声明和定义,而类外定义则先在类中声明,再外部定义。方法可以有参数,访问权限可通过 public、private 和 protected 控制。静态方法与类关联,不依赖对象实例,直接用类名调用。了解这些概念有助于面向对象编程。
16 0
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”