0

数値 1 を含む桁数を取得する必要があります。Java では入力を として取得してStringを使用できることは知ってcharAtいますが、C には暗黙的な String 関数がないことを理解しています。これをどのように達成できますか?

4

12 に答える 12

6

除算とモジュラスはあなたの友達です。

#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]);
}
于 2008-09-15T19:44:15.860 に答える
1

これは基本的な理解の問題であり、誰もが言語を切り替えることは避けられません。

Java に慣れ始めたときに C で文字列がどのように機能するかを理解するには、string.h の機能を参照することをお勧めします。Java の文字列はオブジェクトであり、組み込みであるのに対し、C の文字列は単なる整数配列です。

そこにはたくさんのチュートリアルがありますが、今年の初めに始めたときに私を助けたのはhttp://www.physics.drexel.edu/students/courses/Comp_Phys/General/C_basics/弦セクションを見てください。

質問をすることで、何時間も教科書を読み進めるよりもはるかに速く学習をスピードアップできる場合があります。

于 2008-09-16T05:59:44.227 に答える
1

次のようなものを試してください...

int digit = 0;
int value = 11031;

while(value > 0)
{
    digit = value % 10;
    /* Do something with digit... */
    value = value / 10;
}
于 2008-09-15T19:47:39.440 に答える
1

宿題?

char*関数を使用してそれをfread()読み取り、読み取ったバイト数を別の変数に格納します。次に、forループを使用してバッファを反復処理し、各バイトがいくつ存在するかをカウントします。

于 2008-09-15T19:45:23.113 に答える
1

番号だけがある場合は、次のことができます。

 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 例外がないため注意が必要です。文字列の末尾を超えると、プログラムがクラッシュするか、さらに悪いことに、プログラムは実行を続けますが、内部状態がめちゃくちゃになる可能性があります。

于 2008-09-15T19:46:22.347 に答える
0

これに沿った何か:

#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);
}
于 2008-09-15T20:00:54.840 に答える
0

これでできます。:-)

int count_digits(int n, int d) {
  int count = 0;
  while(n*10/=10) if (n%10==d) count++
  return count;
}
于 2008-09-15T21:30:31.410 に答える
0
int count_digit(int nr, int digit) {
    int count=0;
    while(nr>0) {
      if(nr%10==digit)
        count++;
      nr=nr/10;
    }
    return count;
}
于 2008-09-15T19:47:55.290 に答える
0

これは宿題の問題のように思えます。まあ、それはあなたの人生です。

「入力整数」を含む変数の型を指定できませんでした。入力整数が整数型 (「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;
}

お役に立てれば。次回は、自分の宿題をやってください。そして、私の芝生から降りてください!子供たち、最近、...

于 2008-09-15T19:50:44.050 に答える
0

この質問を宿題の質問と呼んでいるすべての人へ: 私は言わざるを得ませんが、あなたのほとんどは宿題の答えを提供しました.

第一に、それが最適ではないため(CPUは10進数ではなく2進数演算用に設計されているため)、第二に直感的でないためです。元は文字列ではない場合でも、文字列に変換してから文字数をカウントする方が最適です (std::count は C++ での方法です)。

于 2008-09-15T21:44:44.980 に答える
0

次のようなもの:

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++;
}
于 2008-09-15T19:46:27.807 に答える
0
int countDigit(int Number, int Digit)
{
   int counter = 0;

   do
   {
      if( (Number%10) == Digit)
      {
         counter++;
      }
   }while(Digit>0)

   return counter;
}
于 2008-09-15T19:53:19.943 に答える