鱼C论坛

 找回密码
 立即注册
查看: 2045|回复: 11

[已解决]如何string的多段拼接

[复制链接]
发表于 2021-1-4 19:50:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
string total;
int i = 1;
total = "这是"+i+"段文字";
想要达成这种效果该怎么做 直接用加号好像不太可以
最佳答案
2021-1-4 20:45:13
这样的语法实现不了,只能写成这样
        std::string a;
        int i = 1;
        a = "hello";
        a += i;
        a += "world";
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-1-4 20:34:53 | 显示全部楼层
改成这样:
  1. # include <iostream>
  2. # include <string>
  3. using namespace std;

  4. int main()
  5. {
  6.         string total;
  7.         int i = 1;
  8.         total = "这是" + to_string(i) + "段文字";
  9.         cout << total;
  10.         return 0;
  11. }
复制代码

P.S: 须在C++11版本下使用
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-1-4 20:45:13 | 显示全部楼层    本楼为最佳答案   
这样的语法实现不了,只能写成这样
        std::string a;
        int i = 1;
        a = "hello";
        a += i;
        a += "world";
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-4 21:03:42 | 显示全部楼层
不过,你可以通过继承string 类的方式重载 + 号运算符
  1. #include<string>
  2. #include<stdio.h>

  3. class mystring:public std::string
  4. {
  5. public:
  6.         mystring(){}
  7.         mystring(const char * s)
  8.         {
  9.                 empty();
  10.                 (*this)  += s;
  11.         }
  12.         mystring(int i)
  13.         {
  14.                 (*this) = i;
  15.         }
  16.                
  17.         ~mystring(){}

  18.         mystring & operator = (int i)
  19.         {
  20.                 char buffer[16] = {0};
  21.                 sprintf(buffer,"%d",i);
  22.                 empty();
  23.                 (*this) += buffer;
  24.                 return *this;
  25.         }

  26.         friend mystring operator +(const mystring & s1,const mystring & s2)
  27.         {
  28.                 mystring s = s1;
  29.                 s += s2;
  30.                 return s;
  31.         }

  32.         friend mystring operator +(const mystring & s1,const char * s2)
  33.         {
  34.                 mystring s = s1;
  35.                 s += s2;
  36.                 return s;
  37.         }

  38.         friend mystring operator + (const mystring & s1,int i)
  39.         {
  40.                 mystring s = s1;
  41.                 mystring s2 = i;
  42.                 s += s2;
  43.                 return s;
  44.         }

  45. };

  46. void main()
  47. {
  48.         mystring a;
  49.         int i = 1;
  50.         a = mystring("这是") + i + "段文字";
  51.        
  52. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-1-5 13:17:51 | 显示全部楼层
xieglt 发表于 2021-1-4 21:03
不过,你可以通过继承string 类的方式重载 + 号运算符

有道理!!!! 感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-5 15:39:35 | 显示全部楼层
xieglt 发表于 2021-1-4 21:03
不过,你可以通过继承string 类的方式重载 + 号运算符

那如果同时想实现double类型的拼接改怎么办
我试着把int类型改成double类型加了上去  最后显示的是0
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-5 15:40:29 | 显示全部楼层

  1. class mystring:public std::string
  2. {
  3. public:
  4.         mystring(){}
  5.         mystring(const char * s)
  6.         {
  7.                 empty();
  8.                 (*this)  += s;
  9.         }
  10.         mystring(int i)
  11.         {
  12.                 (*this) = i;
  13.         }
  14.         mystring(double i)
  15.         {
  16.                 (*this) = i;
  17.         }
  18.                
  19.         ~mystring(){}

  20.         mystring & operator = (int i)
  21.         {
  22.                 char buffer[16] = {0};
  23.                 sprintf(buffer,"%d",i);
  24.                 empty();
  25.                 (*this) += buffer;
  26.                 return *this;
  27.         }
  28.         mystring & operator = (double i)
  29.         {
  30.                 char buffer[16] = {0};
  31.                 sprintf(buffer,"%d",i);
  32.                 empty();
  33.                 (*this) += buffer;
  34.                 return *this;
  35.         }

  36.         friend mystring operator +(const mystring & s1,const mystring & s2)
  37.         {
  38.                 mystring s = s1;
  39.                 s += s2;
  40.                 return s;
  41.         }

  42.         friend mystring operator +(const mystring & s1,const char * s2)
  43.         {
  44.                 mystring s = s1;
  45.                 s += s2;
  46.                 return s;
  47.         }

  48.         friend mystring operator + (const mystring & s1,int i)
  49.         {
  50.                 mystring s = s1;
  51.                 mystring s2 = i;
  52.                 s += s2;
  53.                 return s;
  54.         }
  55.                 friend mystring operator + (const mystring & s1,double i)
  56.         {
  57.                 mystring s = s1;
  58.                 mystring s2 = i;
  59.                 s += s2;
  60.                 return s;
  61.         }

  62. };
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-5 15:40:59 | 显示全部楼层
xieglt 发表于 2021-1-4 21:03
不过,你可以通过继承string 类的方式重载 + 号运算符

代码放到下面了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-5 15:53:21 | 显示全部楼层
Ryan_Li 发表于 2021-1-5 15:40
代码放到下面了
  1. mystring & operator = (double i)
  2.         {
  3.                 char buffer[16] = {0};
  4.                 //这里 的输入格式 应换成                 sprintf(buffer,"%lf",i);
  5.                 sprintf(buffer,"%d",i);
  6.                 empty();
  7.                 (*this) += buffer;
  8.                 return *this;
  9.         }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-5 23:25:40 | 显示全部楼层
xieglt 发表于 2021-1-4 21:03
不过,你可以通过继承string 类的方式重载 + 号运算符

大佬 你那个empty函数是干嘛的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-6 08:41:42 | 显示全部楼层
Ryan_Li 发表于 2021-1-5 23:25
大佬 你那个empty函数是干嘛的


empty() 是 string 类的成员函数,作用是清空 string ,也就是相当于 string = "";
实际上,在构造函数里是不用调用empty()的,因为对象在构造时本来就是空的。
但是在重载  = 时是需要先empty()的。

  1.         mystring & operator = (double i)
  2.         {
  3.                 char buffer[16] = {0};
  4.                 //这里 的输入格式 应换成                 sprintf(buffer,"%lf",i);
  5.                 sprintf(buffer,"%d",i);
  6.                 //清空对象原有的内容
  7.                 empty();
  8.                 //这里用的是 += 运算符,而不是 = 运算符,所以要先清空
  9.                 (*this) += buffer;
  10.                 return *this;
  11.         }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-6 11:02:06 | 显示全部楼层
xieglt 发表于 2021-1-6 08:41
empty() 是 string 类的成员函数,作用是清空 string ,也就是相当于 string = "";
实际上,在构造函 ...

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-3 05:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表