3

割り当てられた宿題に問題があり、何か助けが得られるかどうか疑問に思いました. とにかく、タスクは次のとおりです。「キーボードからランダムな文字と数字を入力する必要があります。文字列はプログラムから分析する必要があります。その後、すべての数字は入力: asd-12sdf45-56asdf100 出力:77

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

int main() { 
    char stringText[50]; 
    char arraySaver[50]; 

    int i=0, j=0, k=0; 

    printf("Enter String: "); 
    scanf("%s", &stringText); 

    for(i=0; i<strlen(stringText); i++) { 
        if(isdigit(stringText[i])) { 
            arraySaver[j]=stringText[i]; 
            j++; 
        } 
    } 

    system("pause"); 
    return 0; 
} 
4

2 に答える 2

3

これは宿題なので、解決策のコードは書きません。しかし、あなたかなり近いです。数字の配列があります。今必要なことは次のとおりです。

  1. を繰り返しarraySaverます。
  2. 各要素を出力します。
  3. たとえば、外部変数で現在の合計を維持しますsum
  4. ループの外側で、 を出力しますsum

アップデート

宿題の要件が何であるかはわかりませんが、個々の数字を見る必要がある場合は問題ありません。しかし、負の数を見る必要がある場合、または桁の連続を単一の数と見なす必要がある場合は、さらに作業を行う必要があります。

  1. 文字が負の場合、負の数である可能性があると想定します。そのようにマークするフラグを設定します。
  2. 文字が数字の場合、それが数字の始まりであると想定します。各数字を追跡しながら、数字以外の文字に遭遇するまで読み続けます。
  3. 符号 (つまり、負かどうかを示すフラグ) を考慮しながら、これまでに読み取った数値を保存します。

コードの残りの部分は似ているはずです。

于 2013-04-19T18:06:17.100 に答える
2

あなたは近いですが、fgets()代わりに を使用しscanf()てから、他の手段で文字列を解析する必要があります (つまりsscanf、改行文字のキャプチャに関するさまざまな問題を回避するためなど)。1 桁を合計するだけであれば、これでうまくいきます。より複雑なもの (つまり、このコードの場合の abc12abc は、「12」として評価されるのではなく、「1 + 2」として合計されます) の場合、より複雑なロジックが必要になります。

ヒントは次のとおりです。既存のループ内に、次のような別のループが必要になりますwhile(isdigit[k++])。幸運を!

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#define MAX_BUF_LENGTH  (50)

int main(void) {
   char buf[MAX_BUF_LENGTH]     = { 0 };
   char digits[MAX_BUF_LENGTH]  = { 0 };
   char temp[MAX_BUF_LENGTH]    = { 0 };
   int i, j;
   int sum = 0;

   printf("Enter String: ");
   fgets (buf,MAX_BUF_LENGTH,stdin);

   /* Analyze the input string, and backup each digit while maintaining
    * a running sum.
    */
   for(i=0,j=0; i<strlen(buf); i++) {
      if(isdigit(buf[i])) {
         digits[j] = buf[i];
         j++;
         snprintf(temp, MAX_BUF_LENGTH, "%c", buf[i]);
         sum += atoi(temp);
      }
   }
   printf("Original String:%s\n", buf);
   printf("Digit String:   %s\n", digits);
   printf("Sum of Digits:  %d\n", sum);

   system("pause");
   return 0;
}
于 2013-04-19T18:17:54.080 に答える