数値 1 を含む桁数を取得する必要があります。Java では入力を として取得してString
を使用できることは知ってcharAt
いますが、C には暗黙的な String 関数がないことを理解しています。これをどのように達成できますか?
12 に答える
除算とモジュラスはあなたの友達です。
#include "stdio.h"
int main(){
int digits[] = {0,0,0,0,0,0,0,0,0,0};
int i = 11031;
while(i > 0){
digits[i % 10]++;
i = i / 10;
}
printf("There are %d ones.\n", digits[1]);
}
これは基本的な理解の問題であり、誰もが言語を切り替えることは避けられません。
Java に慣れ始めたときに C で文字列がどのように機能するかを理解するには、string.h の機能を参照することをお勧めします。Java の文字列はオブジェクトであり、組み込みであるのに対し、C の文字列は単なる整数配列です。
そこにはたくさんのチュートリアルがありますが、今年の初めに始めたときに私を助けたのはhttp://www.physics.drexel.edu/students/courses/Comp_Phys/General/C_basics/弦セクションを見てください。
質問をすることで、何時間も教科書を読み進めるよりもはるかに速く学習をスピードアップできる場合があります。
次のようなものを試してください...
int digit = 0;
int value = 11031;
while(value > 0)
{
digit = value % 10;
/* Do something with digit... */
value = value / 10;
}
宿題?
char*
関数を使用してそれをfread()
読み取り、読み取ったバイト数を別の変数に格納します。次に、for
ループを使用してバッファを反復処理し、各バイトがいくつ存在するかをカウントします。
番号だけがある場合は、次のことができます。
int val; //Input
...
int ones = 0;
while(val != 0) {
ones += ((val % 10) == 1) ? 1 : 0;
val /= 10;
}
文字列 (char*) がある場合は、次のようにします。
while(*str != '\0') {
if(*str++ == '1') {
ones++;
}
}
また、c にはある意味で charAt 関数があることにも注意してください。
"java".charAt(i) == "c the language"[i];
char* にインデックスを付けることで、必要な値を取得できますが、indexOutOfBounds 例外がないため注意が必要です。文字列の末尾を超えると、プログラムがクラッシュするか、さらに悪いことに、プログラムは実行を続けますが、内部状態がめちゃくちゃになる可能性があります。
これに沿った何か:
#include <stdio.h>
main() {
char buf[100];
char *p = buf;
int n = 0;
scanf("%s", buf);
while (*p) {
if (*p == '1') {
n++;
}
p++;
}
printf ("'%s' contains %i ones\n", buf, n);
}
これでできます。:-)
int count_digits(int n, int d) {
int count = 0;
while(n*10/=10) if (n%10==d) count++
return count;
}
int count_digit(int nr, int digit) {
int count=0;
while(nr>0) {
if(nr%10==digit)
count++;
nr=nr/10;
}
return count;
}
これは宿題の問題のように思えます。まあ、それはあなたの人生です。
「入力整数」を含む変数の型を指定できませんでした。入力整数が整数型 (「int」など) の場合は、次のようにします。
int countOnes(int input)
{
int result = 0;
while(input) {
result += ((input%10)==1);
result /= 10;
}
return result;
}
「入力整数」が文字列の場合は、これを試してください:
int countOnes(char *input)
{
int result = 0;
while(input && *input) {
result += (*input++ == '1');
}
return result;
}
お役に立てれば。次回は、自分の宿題をやってください。そして、私の芝生から降りてください!子供たち、最近、...
この質問を宿題の質問と呼んでいるすべての人へ: 私は言わざるを得ませんが、あなたのほとんどは宿題の答えを提供しました.
第一に、それが最適ではないため(CPUは10進数ではなく2進数演算用に設計されているため)、第二に直感的でないためです。元は文字列ではない場合でも、文字列に変換してから文字数をカウントする方が最適です (std::count は C++ での方法です)。
次のようなもの:
int val=11031;
int count=0;
int i=0;
char buf[100];
sprint(buf, "%d", val);
for(i=0; (i < sizeof(buf)) && (buf[i]); i++) {
if(buf[i] == '1')
count++;
}
int countDigit(int Number, int Digit)
{
int counter = 0;
do
{
if( (Number%10) == Digit)
{
counter++;
}
}while(Digit>0)
return counter;
}