在C++中将一个char转换成一个string的10种方法

据说“回”字有4种写法,而在C++中将一个char转成一个string却至少有10种方法。
Perl的失败,一个原因是语法像天书,另一个原因是同一个功能的语法实现方式太多,导致代码易读性变差。
虽然C++中有10种方法,但常用的也许就那么2、3种;其他的方法只要知道个大概,也许对别的场合有用。这一点与“回”字和Perl其实不同。
知道什么情况下可以查字典即可,不用背下字典。不过如果能像诺先生那样在几秒内用微积分解答了追及问题,也是不错的。

言归正传。个人认为,在这10种方法中:
1-3: 基本方法,值得记住
4-8: 值得了解,有些方法用于某些情况会很好用
9-10: 似乎无趣,至少对本问题

其实,对于这个问题本身,只要知道方法1-3,甚至只要知道方法1,便已经够了;
但往往遇到的是另一个问题: 如何让一个string的值是 n 个相同的字符?
看下文,使用方法3最方便,而方法5、6、7、8 (即 append, assign, insert, replace), 则可以解决这个问题的变种。

以下内容译自: 10 ways to convert a char to a string in C++,顺序略有调整。

  1. 使用 std::string::operator =
#include <iostream>
#include <string>
 
int main()
{
    char c = 'A';
    std::string s; 
    
    s = c;
    
    std::cout << s << '\n';
    return 0;
}

[译注不存在 string s = c; 这样的写法,因为没有这样的构造函数。]

  1. 使用 std::stringstream
#include <iostream>
#include <string>
#include <sstream>
 
int main()
{
    char c = 'A';
    std::string s;
    
    std::stringstream ss;
    ss << c;
    ss >> s;    // or s = ss.str();
    
    std::cout << s << '\n';
    return 0;
}
  1. 利用填充构造函数 string(size_t n, char c)

该函数将填充 char c 的 n 个拷贝到string中。

    char c = 'A'; 
    std::string s(1, c);
  1. 使用 std::string::push_back
    s.push_back(c);
  1. 利用 string& std::string::append(size_t n, char c)

append()函数将追加 char c 的 n 个拷贝到string的末尾

    std::string s;
    s.append(1, c);
  1. 利用 string& std::string::assign(size_t n, char c)

assgin()函数将使用 char c 的 n 个拷贝来替换string当前的值

    std::string s;
    s.assign(1, c);
  1. 利用 string& std::string::insert(size_t pos, size_t n, char c)

insert()函数将 char c 的 n 个拷贝插在位置 pos 处

    std::string s;
    s.insert(0, 1, c); 

[译注: 关于此方法的更普遍用途,见下例:

    char c = 'A';
    std::string s = "abc";
    s.insert(1, 3, c);   // aAAAbc 

]

  1. 利用 string & std::string::replace(size_t pos, size_t len, size_t n, char c)

replace()函数将 string s 在位置 pos 处开始的 len 个字符替换为 char c 的 n 个拷贝

    std::string s; 
    s.replace(0, 1, 1, c);

[译注: 关于此方法的更普遍用途,见下例:

    char c = 'A';
    std::string s = "abcdef";
    s.replace(1, 2, 3, c);  // aAAAdef 

]

  1. 使用 string& std::string::operator +=
    char c = 'A';
    std::string s;
    s += c;
  1. 将 char 转成 c-string,再利用填充构造函数或string::append()或string::assign()来转换
#include <iostream>
#include <string>
 
int main()
{
    char c = 'A';
 
    // converting char to c-string
    const char* str = &c;
 
    // using std::string fill constructor
    std::string s(str, 1);
    std::cout << s << '\n';
 
    // using std::string::append
    std::string S;
    S.append(str, 1);
    std::cout << S << '\n';
 
    // using std::string::assign
    S.assign(str, 1);
    std::cout << S << '\n';
 
    return 0;
}

[译注:以上代码中的 std::string s(str, 1), S.append(str, 1), S.assign(str, 1), 和之前几种方法中的并不是相同的函数。
本方法中的原型是:

 string (const char* s, size_t n);
 string& append (const char* s, size_t n);
 string& assign (const char* s, size_t n);

这几个方法都是从s地址开始取n个字符。
另:这个作者之所以能整出“回”字的10种写法,主要还是他对string的各成员函数有过一番研究。
]
(完)

  • 23
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值