将整数数组转换为字符串

时间:2017-04-13 19:23:40

标签: c++

如果我有一个看起来像

的数组
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;
}

出现了可怕的破碎。

我也不能简单地删除所有零,只是删除所有零。

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

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

e.g

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

5 个答案:

答案 0 :(得分:5)

你可以使用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;
}

答案 1 :(得分:1)

不要使用for循环更改数字,而是使用

添加它们
 number += to_string(digits[i]);

此外,您可以删除您拥有的toString行,并在我放置时使用它。

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

答案 2 :(得分:1)

尝试以下方式:

dynamic_rnn

答案 3 :(得分:1)

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

#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

答案 4 :(得分:0)

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

ValueError: Shape must be rank 2 but is rank 3 for 'MatMul' (op: 'MatMul') with input shapes: [92,?,128], [128,20].
  

12304