2017-04-13 63 views
0

如果我有一个数组,看起来像转换整数数组串

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; 
} 

就是出可怕的破碎。

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

另外,如果我可以在这里Dogpile网站另外一个问题:

我怎么能确定一个字符串是否是数字?

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

开始看这个:http://stackoverflow.com/questions/5590381/easiest -way-to-convert-int-to-string-in-c它应该可以帮助你将int转换为字符串 – FCo

+1

看一下,https://stackoverflow.com/questions/5223066/converting-int-to-string- in-c –

+0

编辑我的答案以匹配您的所有请求。评论我的帖子,如果你有更多的问题 – RomMer

回答

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; 
} 
+0

是的,我会编辑它 – RomMer

+0

这工作非常好,谢谢。 – Ozymandias

+0

@Ozymandias快乐它可以帮助你有一个愉快的一天,并有乐趣 – RomMer

1

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

number += to_string(digits[i]); 

此外,你可以删除你有的toString行,只是用它,因为我把它放在这里。

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

1

请尝试以下方式:

int i = 0; 
while(digits[i] == 0) i++; 
for (; i < size; i++) 
    result += to_string(digits[i]); 
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 << " "; 
} 

打印:

+0

这是一个不好的做法,他想要使用一个整数数组;不是矢量 – RomMer

+0

@RomMer什么是坏习惯?你真的宁愿将一个整数数组转换为一个字符串,而不是一个int整数? – user463035818

+0

我使用矢量;但是,如果你读他的帖子,他不使用整数 – RomMer

0

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

#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