如果我有一个看起来像
的数组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"
答案 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