[英]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.