如何有效地用不同的整数元素替换字符字符串的元素
How to efficiently replace elements of char string with different integer elements?
我希望用整数元素替换字符串的元素。我想用1
代替A
,B
用2
代替,C
用3
代替,用4
代替D
。
我怎样才能有效地做到这一点?
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
std::string str = "ABCDDCBA";
std::replace(str.begin(), str.end(), 'A', '1'); // Replacing
std::replace(str.begin(), str.end(), 'B', '2');
std::replace(str.begin(), str.end(), 'C', '3');
std::replace(str.begin(), str.end(), 'D', '4');
// ...
std::cout << str << std::endl; // displaying
return 0;
}
您的方法对于将任意字符替换为另一个任意字符非常有效。
但是,目前您将连续的拉丁字母替换为连续的整数,因此您可以利用 ASCII 表示形式也是连续的这一事实:
for(char& c : str)
c += '1' - 'A';
当然,这取决于本地字符编码来表示具有连续值的连续拉丁字母,例如 ASCII。它还取决于连续表示的数字,但这是标准规定的。
此外,此方法目前没有检查替换字符,并且会更改所有遇到的字符。这不是输入字符串的问题,但如果您打算只替换某些类型的字符而保留其他字符,则需要添加条件检查。
或者你可以尝试输入字符串只包含ASCII格式的大写字母
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
std::string str = "ABCDDCBA";
for(int i=0;i<str.size();i++)
{
str[i]=str[i]-'A'+'0';
}
std::cout << str << std::endl; // displaying
return 0;
}
大概你的意思是在一次遍历中替换?有华而不实C++标准库的方法可以做到这一点,或者您甚至可以使用 std::regex
来解决它。但是,在std::string
类上利用重载的[]
运算符在性能方面将很难被击败,这是显而易见的。
for (std::size_t i = 0; i < str.size(); ++i){
switch (str[i]){
case 'A':
str[i] = '1';
break;
case 'B':
/*etc*/
}
}
如果要转换多个字符(我从字面上理解了您的问题,即您只想映射 A、B、C 和 D),请考虑定义一个描述转换的 const char[]
数组;依赖特定字符的值并不是严格意义上的可移植C++。
一个有趣的方法是使用每个字符的 ASCI 值:举例:int('A') = 65,int('B') = 66,所以你只需要做一个 boucleval = int(c) - 64;(仅当您有maj char时才有效)
O(n) 中的一个提案
void MyReplaceFunction(char& c)
{
static const int delta='A'-'1';
if(c>='A' && c<='Z')
{
c-=delta;
}
}
std::for_each(str.begin(), str.end(), MyReplaceFunction);
相关文章:
- C++:如何循环通过向量中的整数元素
- C++ 如何比较n个排序的整数向量以找到互元素?
- C++ 中的二维整数数组,每行中的元素数量不均匀
- 在 C++ 中重复数组中的整数元素的次数
- 如果变量数据包含大于 vector 所有元素的整数,则仅在视觉工作室上接收"矢量下标超出范围"?
- C++向数组添加元素并调整数组大小
- AVX2 整数乘以有符号 8 位元素,产生有符号 16 位结果?
- 查找多个向量之间的公共元素(无整数元素)
- 整数指针数组的元素是否可以指向整数数组?
- " ans += (a[i] - ans * r > 0); "是什么意思,其中 ans,r 是整数,a[i] 是数组元素?
- 调整数组大小并添加元素 C++
- 将数字的字符串数组转换为整数数组时,元素将变为 0
- 在非负整数的未排序数组中查找第 k 个最小元素
- 给定一个包含 n 个整数和一个整数 x 的未排序数组 A,重新排列 A 中的元素
- 打印整数指针元素时的结果不同
- 最长的子序列,其元素构成一组递增的整数
- 可以使用整数索引访问向量元素吗?
- 整数数组元素,前导 0 表示垃圾输出
- 将字符串元素转换为整数 (C++11)
- 如何在C 中获取整数数组的元素