【解決方法】C の文字列カウント内の桁数の頻度に関するセグメンテーション違反

[ad_1]

私は、文字列内の 0 ~ 9 の数字の頻度をカウントし、その頻度を 1 行に出力する C コードを考え出す必要があるハッカー ランクのチャレンジに勝とうとしています。 数字が見つからない場合、プログラムはその数字に対して 0 を出力する必要があります。 私は、10 個のテスト ケースのうち 4 個に合格し、数字と他の記号が混在する文字列内の数字の頻度を出力するコードをなんとか思いつきました。 ただし、他の 6 つのテスト ケースは失敗し、コンパイラは次のメッセージを表示します。 セグメンテーション違反, このエラーを調査したところ、プログラムがそのプログラムに属していないメモリにアクセスしようとした場合、または他のテスト ケースの文字列が大きすぎて関数にパラメーターとして渡すことができない場合に発生することがわかりました。 他のテスト ケースに合格するようにコードを修正してください。
私のコードを以下に示します

私が試したこと:

<pre lang="C++">

<pre>#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <ctype.h>

void countDigits(const char* string) {
   if (string == NULL) {
        printf("Input string is NULL.\n");
        return;
    }

    int digit_frequency[10] = {0}; // Array to store the frequency of each digit
    
    // Iterate over each character in the string
    for (int i = 0; string[i] != '\0'; i++) {
        if (isdigit(string[i])) {
            int digit = string[i] - '0'; // Convert the character to integer
            digit_frequency[digit]++; // Increment the frequency of the digit
        }
    }
    
    // Print the frequency of each digit or 0 if not found
    for (int i = 0; i < 10; i++) {
        printf("%d ", digit_frequency[i]);
    }
}

int main() {

    /* Enter your code here. Read input from STDIN. Print output to STDOUT */    
    //read the input from the string
    char name[50];
    scanf("%s", &name);
    //scan the string for digits
    countDigits(name);
    
    return 0;
}

解決策 1

引用:

文字名[50];

配列のサイズが「不十分」である可能性があります。

[ad_2]

コメント

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