2016-11-03 1 views
0

文字列(たとえば "1234567890")を整数の配列に変換する必要がありますが、要素の幅はユーザーによって決定されます。ユーザは、それがあろう1を通過した場合文字列を決定された幅の整数配列に変換する方法

:SO 2 1 2 3 4 5 6 7 8 9 0

Iは配列を有する:12 34 56 78 90

3:1 234 567 890

4:12 3456 7890

など、私が試した何

#include <iostream> 

using namespace std; 

int main() 
{ 
    string textNumber; 
    int size; 
    cin >> textNumber; 
    cin >> size; 

    int length = textNumber.length(); 
    int lenghtOfArray = length/size + (length % size ? 1 : 0); 
    int myArray[lenghtOfArray] = {0}; 
    int move = lenghtOfArray- (size * lenghtOfArray - length); 
    int copySize = size; 
    int k = 0; 

    for(int i=0; i < length;i++) { 
     if(--copySize && !move){ 
      myArray[k] += (int)textNumber[i]-48; 
     } else { 
      myArray[k] += (int)textNumber[i]-48; 
      ++k; 
      copySize = size; 
      if(move) --move; 
      continue; 
     } 
     myArray[k] *= 10; 
    } 

    myArray[k] += (int)(textNumber[0]-48); 

    for(int i=0; i < lenghtOfArray; i++) { 
     cout << myArray[i] << " "; 
    } 
} 

しかし、すべてのケース(I-t-─w--o-r-k-s-─o-n-l-y-─f-o-r-─s-i-z-e-=œ2-)では機能しません。

+3

_doesn't work_を定義します。 –

+0

[mcve]を入力してください。提供するコードで発生したエラーを再現できる場合は、ヘルプを提供するのが最も簡単です。そのコードをコピー/ペーストしてコンパイルしようとすると、あなたの実際の質問にはあてはまらないコンパイルエラーが発生します。 – user463035818

+0

つまり、なぜ一連の部分文字列を解析するだけではないのですか。私は本当にそれを難解な解決策と見なしません。 – Fallenreaper

答えて

1

一つのアプローチは粉々に文字列を分割し、その結果を解析するstd::stringsubstrメンバ関数と一緒にstd::stoiを使用することです:あなたはC++標準ではないので、配列の代わりにstd::vector<int>を使用する必要が

cin >> s; 
cin >> size; 
int len = s.length(); 
int count = (len+size-1)/size; 
vector<int> res(count); 
int pos = count-1; 
while (s.length() > size) { 
    res[pos--] = stoi(s.substr(s.length()-size)); 
    s = s.substr(0, s.length()-size); 
} 
if (s.length()) { 
    res[0] = stoi(s); 
} 

注意可変長配列は許されません(g ++は一般的な拡張として提供しています)。

Demo.

+0

これは動作しません:s = "15327"とsize = 3 –

+0

@PiotrWasilewicz今すぐ動作するはずです。 – dasblinkenlight

+0

はい、動作します!それはそれほど簡単ではないと私は私がばかだと思う必要はないと言いなさい。それはより大きなアプリケーションの一部であり、私はここでしか立ち往生しない。 –

関連する問題