反转字符串常用方法及函数总结
在C++中,反转字符串的常用方法及函数可以总结如下:
-
使用
std::reverse
函数:std::reverse
是C++标准库算法之一,用于反转任意序列。当用于字符串时,它会反转字符串中字符的顺序。std::string str = "Hello, World!";
std::reverse(str.begin(), str.end());
-
使用反向迭代器:
可以通过字符串的反向迭代器(rbegin()
和rend()
)来创建一个反向的字符串副本。std::string str = "Hello, World!";
std::string reversed_str(str.rbegin(), str.rend());
-
手动编写循环:
通过交换字符串两端的字符,可以手动实现字符串的反转。std::string str = "Hello, World!";
int n = str.length();
for (int i = 0; i < n / 2; i++) {
std::swap(str[i], str[n - i - 1]);
}
-
使用
std::string::assign
和反向迭代器:
可以结合assign
成员函数和反向迭代器来原地反转字符串。std::string str = "Hello, World!";
str.assign(str.rbegin(), str.rend());
-
自定义反转函数:
可以封装一个自定义的反转函数,以便在需要时重复使用。void reverseString(std::string& str) {
std::reverse(str.begin(), str.end());
}
应用场景
反转字符串在编程中具有多种作用和应用场景。以下是一些常见的用途:
- 数据处理:
- 在处理文本数据时,经常需要反转字符串来满足特定的数据处理需求。
- 例如,在处理回文字符串、倒序存储数据或实现特定的字符串操作算法时,反转字符串是一个基本步骤。
- 算法实现:
- 反转字符串是许多算法的一部分,如字符串匹配、模式识别、数据加密等。
- 在实现这些算法时,反转字符串可能是一个必要的中间步骤或最终操作。
- 用户界面:
- 在用户界面设计中,反转字符串可以用于创建镜像效果、实现文本动画或处理用户输入。
- 例如,在用户输入文本后,程序可能会反转字符串以提供一种视觉反馈或实现特定的交互效果。
- 编码和解码:
- 在数据编码和解码过程中,反转字符串可以用于加密和解密数据。
- 通过反转字符串中的字符顺序,可以实现简单的数据加密和解密操作。
- 自然语言处理:
- 在自然语言处理中,反转字符串可以用于处理文本数据,如倒序存储单词、句子或段落。
- 这有助于实现特定的文本分析、文本挖掘或机器学习任务。
- 游戏开发:
- 在游戏开发中,反转字符串可以用于实现文本效果、处理用户输入或生成特定的游戏元素。
- 例如,在创建文本动画、处理玩家输入的文本命令或生成随机字符串时,反转字符串可能是一个有用的工具。
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s
的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
class Solution {
public:
void reverseString(vector<char>& s) {
int n=s.size();char t;
for(int i=0,j=n-1;i<n/2;i++)
{
/*t=s[i];
s[i]=s[j];
s[j]=t;
j--;*/
swap(s[i],s[j--]);
}
}
};
给你一个下标从 0 开始的字符串 s
,它的 偶数 下标处为小写英文字母,奇数 下标处为数字。
定义一个函数 shift(c, x)
,其中 c
是一个字符且 x
是一个数字,函数返回字母表中 c
后面第 x
个字符。
- 比方说,
shift('a', 5) = 'f'
和shift('x', 0) = 'x'
。
对于每个 奇数 下标 i
,你需要将数字 s[i]
用 shift(s[i-1], s[i])
替换。
请你替换所有数字以后,将字符串 s
返回。题目 保证 shift(s[i-1], s[i])
不会超过 'z'
。
class Solution {
public:
string replaceDigits(string s) {
int n=s.size();
for(int i=1;i<n;i+=2)
{
s[i]=s[i-1]+(s[i]-'0');
}
return s;
}
};
给你一个字符串 s
,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s
中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s
中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
示例 1:
输入:s = "the sky is blue
" 输出:"blue is sky the
"
解释
解释
示例 2:
输入:s = " hello world " 输出:"world hello" 解释:反转后的字符串中不能存在前导空格和尾随空格。
示例 3:
输入:s = "a good example" 输出:"example good a" 解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。
class Solution {
private:
/**
* 反转字符串s的[start, end]部分
*/
void reverse(string& s, int start, int end){
while(start < end){
swap(s[start++], s[end--]);
}
}
public:
string reverseWords(string s) {
int n = s.size();
while(n > 0 && s[n - 1] == ' ')n--; // 找到最后一个字符的后一个位置
int slow = 0;
for(int fast = 0; fast < n; fast++){
// 遇到字符或者字符后的首个空格就不保留
if(s[fast] != ' ' || (fast > 0 && s[fast - 1] != ' ')){
s[slow++] = s[fast];
}
}
s.erase(s.begin() + slow, s.end()); // 去除多余部分,s[0, slow)部分就是去除多余空格的结果
n = s.size();
reverse(s, 0, n - 1); // 先反转整个字符串
for(int end = 0; end < n; end++){
int start = end;
while(end < n && s[end] != ' ')end++;
reverse(s,start,end-1) ; // s[start, end)就是要反转的单词
}
return s;
}
};