質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

559閲覧

array配列で設定した数を桁数ごとに分類し,分類ごとの個数を求めるプログラムを作成したい

wagashi_157

総合スコア51

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/07/03 05:13

前提・実現したいこと

配列num に格納されている数値について,数値の桁数によって分類し数を数えたいです。また,1 桁~4 桁の4 種類に分類したとき,それぞれの分類に格納される個数は何個になるかを表示させるプログラムを作成したいです。

発生している問題

コンパイルは通るのに,何も表示されず,array配列へポインタを使用方法が分かりません。定義したcount関数に&num[0]や&cnt[0]を代入しても全ての桁数を分類してその個数を数えることができていません。array要素を実引数にする方法に慣れていないのでどのようにすれば良いか教えていただきたいです。その中でも,array配列の最初から最後までポインタを使って実行する方法が分からないので教えてほしいです。

該当のソースコード

C++

1#include<iostream> 2#include<array> 3void count(int *n,int m,int *c) { 4 *n=1; 5 while (n!=nullptr) { 6 while (*n!=0) { 7 (*n)/=10; 8 ++(*n); 9 } 10 ++(*c); 11 ++n; 12 } 13} 14 15int main() { 16 std::array num={0,1001,32,55,961,872,3,455,606,999,1055,87}; 17 std::array<int,4> cnt{0}; 18 count(&num[0],num.size(),&cnt[0]); 19 20 for (int i=0; i<cnt.size(); i++) { 21 if (i==0) std::cout<<i+1<<"digit: "<<cnt[i]<<"\n"; 22 else std::cout<<i+1<<"digits: "<<cnt[i]<<"\n"; 23 } 24 std::cout<<"\n"; 25}

試したこと

定義したcount関数のうち,()の中を(int &n[],int m,int &c[])といった表記も試しましたが,その時はエラーが出てしまいました。

補足情報

C++17を利用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

*n = 1; なんてやったら、main の num[0] の 0 が 1 になります。、
n は絶対に nullptr にはなりません。

C++

1#include <iostream> 2#include <array> 3 4void count(int *n, int m, int *c) 5{ 6 while (--m >= 0) { 7 int k = 0; 8 do k++; while (*n /= 10); 9 c[k-1]++; 10 n++; 11 } 12} 13 14int main() 15{ 16 std::array<int,12> num { 0,1001,32,55,961,872,3,455,606,999,1055,87 }; // ★ 17 std::array<int,4> cnt { 0 }; 18 count(&num[0], num.size(), &cnt[0]); 19 20 for (int i = 0; i < cnt.size(); i++) { 21 if (i == 0) 22 std::cout << i+1 << "digit: " << cnt[i] << "\n"; 23 else 24 std::cout << i+1 << "digits: " << cnt[i] << "\n"; 25 } 26 std::cout << "\n"; 27}

count を呼び出すと main の num はすべて 0 になりますが、いいんですか?

投稿2021/07/03 05:53

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問