2017-04-13 64 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