0

print ステートメントを各関数 (alpha_count および sum_digits) 内のどこに配置して、(プログラムの最後に) 1 回だけ出力するかを見つける手助けが必要です。

元。
文字数: 8
桁の合計: 19

現時点では、関数が呼び出されるたびに出力されます。何か案は?

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

//Prototypes
void count_alpha(char *s, int len, int index); 
void sum_digit(char *s, int len, int index);

#define SIZE 22

int main(void){
  //Declarations
  char string[SIZE];
  int length;

  //Get string from user
  printf("Enter a string of letters and numbers: ");
  scanf("%s", string);
  printf("String: %s\n", string);
  //Get length of string
  length = strlen(string);
  printf("Length: %d\n", length);
  //Get letters from string
  count_alpha(string, length, 0);

  return 0;
}

void count_alpha(char *s, int len, int index){
  static int characters = 0;
  char c = ' ';

  if (index < len){
    c = s[index];
    if(isalpha(c)){
        characters++;
        printf("char: %d\n", characters);
        index++;
        printf("index: %d\n", index);
        count_alpha(s, len, index);
    }
    else if(isdigit(c)){
        sum_digit(s, len, index);
    }
    //index++;
    //printf("index: %d\n", index);
    //printf("Number of Characters: %d\n", characters);
  }
  //else
  printf("Number of Characters: %d\n", characters);

}

void sum_digit(char *s, int len, int index){
  static int digits = 0;
  char c = ' ';

  if (index < len){
    c = s[index];
    if(isalpha(c)){
        count_alpha(s, len, index);
  }
  else if(isdigit(c)){
        printf("num is: %c", c);
        //printf("number is: %d", (atoi(&s[index])));
        //digits += atoi(&c);
        digits += c - '0';
        printf("sum: %d\n", digits);
        index++;
        printf("index: %d\n", index);
        sum_digit(s, len, index);
    }
    //index++;
    //printf("index: %d\n", index);
    //printf("Sum of digits: %d\n", digits);
  }
  //else
  printf("Sum of digits: %d\n", digits);

}
4

2 に答える 2

0

alpha_count()およびが効果的に統計収集を行っているためsum_digits()、統計タイプへのポインターを渡します。静的変数をドロップします。

typedef struct {
  unsigned characters;
  unsigned digits;
} char_digs;


void sum_digit(char *s, int len, int index, char_digs *stat) {
  // static int digits = 0;
  ...
  count_alpha(s, len, index, stat);
  ...
  stat->digits += c - '0';
  ...
  sum_digit(s, len, index, stat);
  ...
}      

void count_alpha(char *s, int len, int index, char_digs *stat) {
  // like sum_digit() above
}

int main(void) {
  ...
  char_digs stat = {0,0};
  ...
  count_alpha(..., ..., &stat);
  printf("Number of Characters: %u\n", stat.characters);
  printf("Sum of digits: %u\n", stat.digits);
}
于 2015-10-24T21:41:35.417 に答える