【问题标题】:converting an array of integers to string将整数数组转换为字符串
【发布时间】:2017-04-13 19:23:40
【问题描述】:

如果我有一个看起来像这样的数组

int digits[size] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 4}

我想删除前导零,并尝试将整数数组转换为字符串(这是一个字符数组)。

我的尝试看起来像

string toString(int digits[], int size){
string number = " ";
for(int i = 0; i < size - 1; i++){
    number[i] = digits[i];
}
return number;
}

它坏了。

我也不能简单地删除所有的零,只删除前导的。

另外,如果我可以在这里提出另一个问题:

如何识别字符串是否为数字?

例如

string number = "12a4"
cout << "not a number"

【问题讨论】:

标签: c++


【解决方案1】:

你可以使用 C++11 函数 std::to_string() 这是一个例子

#include <string>
#include <iostream>

int main()
{
   int size = 15;
   int digits[size] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 4};
   std::string result = "";

   for (int i = 0; i < size; i++)
   {
      if (!(digits[i] == 0 && result.size() == 0))
         result += std::to_string(digits[i]);
   }

   std::cout << result << std::endl;
}

您可以使用此函数检查字符串是否为数字

bool isNb(std::string str)
{
  if (str.size() == 0)
    return false;

  for (int i = 0; i < str.size(); i++)
  {
    if (std::isdigit(str.at(i)) == false)
      return false;
  }

  return true;
}

【讨论】:

    【解决方案2】:

    不要使用 for 循环更改数字,而是添加它们

     number += to_string(digits[i]);
    

    另外,您可以删除您拥有的 toString 行,并按照我在这里的说明使用它。

    至于你的另一个问题,只需使用 for 循环检查字符串中的每个数字及其 ASCII 值,如果有任何 ASCII 值小于 48 或大于 57,则它不是数字。

    【讨论】:

      【解决方案3】:

      试试下面的方法:

      int i = 0;
      while(digits[i] == 0) i++;
      for (; i < size; i++)
         result += to_string(digits[i]);
      

      【讨论】:

        【解决方案4】:

        要回答您的实际问题(如何删除前导零?)这里有一个不带字符串的解决方案:

        #include <iostream>
        #include <vector>
        #include <algorithm>
        using namespace std;
        
        int main() {
            std::vector<int> x = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 4};
            // ...or if you insist on the array...
            // int x[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 4};
            // std::vector<int> x = {x,x+15};
            auto it = std::find_if_not(x.begin(),x.end(),[](int i){return i==0;});
            std::vector<int> y{it,x.end()};
            for (auto i : y) std::cout << i << " ";
        }
        

        打印:

        1 2 3 0 4

        【讨论】:

        • 这是一种不好的做法,他想使用整数数组;不是向量
        • @RomMer 有什么不好的做法?你真的宁愿将整数数组转换为字符串而不是整数向量吗?
        • 我使用向量;但是如果您阅读他的帖子,他不会使用整数数组
        • @RomMer 向量只是一个数组(加上更好的界面)
        • @RomMer 无论如何,我在代码中添加了一些 cmets,以便可以从数组开始使用它
        【解决方案5】:

        您可以使用字符串流将任何类型转换为字符串:

        #include <sstream> //<-- ALLOWS USE OF std::stringstream 
        const int size = 15;
        
        int digits[size] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 4};
        
        std::stringstream ss;  //<-- DECLARE STREAM
        
        int k;
        for (k = 0; k < size; ++k)
                if (digits[k] != 0)
                        break; //FIND FIRST NON-0 INDEX
        
        for (int i = k; i < size; ++i)
                        ss << digits[i]; //ADD TO THE STREAM s
        
        std::cout<< ss.str() << std::endl; //PRINT STREAM
        

        12304

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-04-21
          相关资源
          最近更新 更多