【解決方法】添字付きの値は、配列、ポインター、またはベクトルではありません temp = temp * 10 + *nums[I];

プログラミングQA


#include <iostream>

int addArray(int nums, int k){
    int temp = 0;
    for(int i = 0; i < sizeof(nums); i++){
        temp = temp * 10 + nums[i];
    }
    return temp + k;
}
int main()
{
    int nums1[] = {1,0,0,0};
    int res = addArray(nums1, 300);
    std::cout<<res;
}

私が試したこと:

配列を整数に追加しようとしていますが、このエラーが表示されます。 私に何ができる?

解決策 1

最初に for ループを使用して配列をループしたいと思います。
sizeof(array) だけを使用すると、配列の合計サイズがバイト単位で表示されますが、配列の長さは表示されません。 そのためには、配列が保持するデータ型のサイズで結果を除算する必要もあります。 この場合、int.

したがって、ループは次のようになります

C++
for(int i = 0; i< sizeof(nums)/sizeof(int); i++)

これで問題が解決するはずです。

解決策 2

見積もり:

int addArray(int nums, int k){

これは間違っています。 nums 整数の配列でなければなりません (とにかく、配列のサイズも渡す必要があります)。

試す

C++
#include <iostream>

int addArray(int num[], size_t num_size, int offset)
{
  int temp = 0;
  for(size_t n = 0; n < num_size; ++n)
  {
    temp = temp * 10 + num[n];
  }
  return (temp + offset);
}

int main()
{
  int num[] = {1,0,0,0};

  int res = addArray(num, sizeof(num)/sizeof(int), 300);
  std::cout << res << std::endl;
}

次のように書くこともできます。

C++
#include <iostream>
#include <numeric>

int main()
{
  int num[] = {1,0,0,0};
  int result = 300 + std::accumulate( std::begin(num), std::end(num), 0, [](int a, int b){ return a*10 + b; });
  std::cout << result << std::endl;
}

コメント

タイトルとURLをコピーしました