【问题标题】:How to split a string into groups of 3 characters with space between them如何将字符串拆分为 3 个字符的组,它们之间有空格
【发布时间】:2018-05-05 00:07:39
【问题描述】:

我有字符串

std::string MegaNum( float 10020030040 )

重要的是转换我的字符串,以便我们可以为每 3 位数字放置一个空格。我们如何将它们分组并不那么重要。

我想转换为 4 个 1-3 位数值的新值

float 1; /*with value 10*/
float 2; /*with value 020*/
float 3; /*with value 030*/
float 4; /*with value 040*/

然后将其打印为

10 020 030 040

【问题讨论】:

  • 020 的值真的应该是20,对吧? 020 不是一个数字,它是一个数字序列。是否必须将std::string 转换为floats?你不能从原始字符串的末尾每 3 个字符插入一个空格吗?
  • 这不是免费的家庭作业服务。请向我们展示您迄今为止为解决问题所做的尝试,以及您遇到问题的原因。 idownvotedbecau.se/noattempt 这是一个起点:en.cppreference.com/w/cpp/string/basic_string/insert。使用它的解决方案效率不高,但对于您正在做的事情应该足够好。
  • @Fureeish 不,我想说这不是强制性的。要点是将数字(例如 1010 美元)转换为 1 010 美元或电话号码
  • @FeiXiang 我尝试了几种方法,实际上是 3 种不同的方法。我最接近的是将 1020 转换为 1 0 2 0 但我似乎无法弄清楚如何对它们进行分组。我看到了针对不同编程语言的不同解决方案,但没有看到针对 C++ 的解决方案。顺便说一句,我正在创建一个计算贷款利息的程序,我想很好地格式化它。

标签: c++


【解决方案1】:

转换我的字符串,以便我们可以为每 3 个数字放置一个空格。

由于您从字符串开始,您可能会考虑直接执行操作(没有浮点数学)。

下面的函数接受一个字符串,从最低有效字符(最右边)开始计算 3 位数字,并返回插入空格的数字(行增长)。 (它不确认数字的有效性,不检查字符是否为数字)

std::string digiSpace3(std::string s)
   {  //      sSize must be signed int of sufficient size
      int32_t sSize = static_cast<int32_t>(s.size());
      if (sSize > 3)
         for (int32_t indx = (sSize - 3); indx > 0; indx -= 3)
            s.insert(static_cast<size_t>(indx), 1, ' ');
      return(s);
   }

类似:

std::string MegaNum = "10020030040" ;
// std::string MegaNum  ( std::to_string(10020030040) ) ; //also works

std::cout << "\n  " << digiSpace3(MegaNum) << std::endl;

并产生

  10 020 030 040

fyi - 我的编译器不接受

std::string MegaNum( float 10020030040 );

和报告

 error: expected ‘,’ or ‘...’ before numeric constant

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多