首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何有效地用不同的整数元素替换字符字符串的元素?

如何有效地用不同的整数元素替换字符字符串的元素?
EN

Stack Overflow用户
提问于 2017-01-13 11:33:43
回答 5查看 705关注 0票数 2

我希望用整数元素替换字符串的元素。我想用1代替A,用2代替B,用3代替C,用4代替D

我怎样才能有效地做到这一点呢?

代码语言:javascript
复制
#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;
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-01-13 11:43:40

您的方法对于将任意字符替换为另一个任意字符非常有效。

但是,目前您用连续整数位替换连续拉丁字母,因此您可以利用ASCII表示形式也是连续的这一事实:

代码语言:javascript
复制
for(char& c : str)
     c += '1' - 'A';

当然,这取决于本地字符编码来表示具有相邻值的连续拉丁字母,如ASCII所做的那样。它还依赖于连续表示的数字,但这是标准规定的。

此外,此方法目前没有检查替换字符,并将更改所有遇到的字符。这不是输入字符串的问题,但如果您只打算替换某些类型的字符,而保留其他类型的字符,则需要添加条件检查。

票数 5
EN

Stack Overflow用户

发布于 2017-01-13 11:38:37

您的意思大概是在一次遍历中进行替换吗?有一些花哨的C++标准库( Standard )方法可以这样做,或者您甚至可以用std::regex解决它。但是,在[]类上利用重载的std::string操作符在性能上是很难克服的,这是显而易见的。

代码语言:javascript
复制
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++。

票数 1
EN

Stack Overflow用户

发布于 2017-01-13 11:39:15

或者,如果输入字符串仅包含ASCII格式的大写字母,则可以尝试。

代码语言:javascript
复制
#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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41633732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档