簡體   English   中英

將整數數組轉換為字符串

[英]converting an array of integers to string

如果我有一個看起來像的數組

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

不用用for循環更改數字,而是用

 number += to_string(digits[i]);

另外,您可以刪除已有的toString行,並按我在此處的說明使用它。

至於您的其他問題,只需使用for循環來檢查字符串中的每個數字及其ASCII值,如果有ASCII值小於48或大於57的數字,則該數字不是數字。

請嘗試以下方式:

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

要回答您的實際問題(如何刪除前導零?),請使用以下不帶字符串的解決方案:

#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

您可以使用字符串流從任何類型轉換為字符串:

#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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM