大学の講義で以下の課題を与えらられましたが、配列に入れた加減算の扱い(アルゴリズム)が
わからず困っております。
どなたかご教示お願いします。
標準入力に与えられたテキストをすべて読み取り、その中に現れた数値表現全てについてその表す値の総計を計算してその値を最小限の桁数で1行として標準出力に書き出すプログラムを作れ。
ここで数値表現とは、数字だけが並んだもので、その前後には数字が現れていず、前には記号 + または - があってもよいとする。数値表現は、十進表現で値を表していて、その前について + または - があればそれは表す値の符号を示しているとする。
実行例
標準入力
Calculate:
+12-34+0.25
標準出力
3
標準入力
Videos will be made opened on 2019-04-10, 12:00:00.
標準出力
2017
実行例から見て取れるように、この課題では、例えば「(12.34)」と書いてあれば二つの数値表現 12 と 34 を読み取ることになる。
#include <stdio.h> #include <stdint.h> #include <inttypes.h> #include <math.h> #include <string.h> #include <stdio.h> #include <stdlib.h> //char型からint型への変換用関数 int ctoi(char c) { switch (c) { case '0': return 0; case '1': return 1; case '2': return 2; case '3': return 3; case '4': return 4; case '5': return 5; case '6': return 6; case '7': return 7; case '8': return 8; case '9': return 9; default: return 0; } } //プログラム開始 int main(void) { //変数定義 char str[256]; int IntList[1000]; char c; //int Change = 0; int i=0; int j=1; int x=0; int num1=0; int num2=0; //int num3=0; //char purasu='+'; //char mainasu='-'; i = 0; //標準入力値を全て配列に入れる while( (c = getchar()) != EOF ){ //入力値から余分なものを取り除く //printf("%c\n",c); if((c=='0'||c=='1'||c=='2'||c=='3'||c=='4'||c=='5'|| c=='6'||c=='7'||c=='8'||c=='9'||c=='+'||c=='-' ||c=='.' )){ str[i]=c; //printf("%c\n",str[i]); i++; } } ※以下の部分がどのように処理をしたらよいかわからないです。 //配列データがなくなるまでループを行う i = 0; x = 0; while(str[i] != '\0'){ if(str[i] != '+' && str[i] != '-'){ IntList[x] = ctoi(str[i]); printf("%d\n",IntList[x]); } else if(str[i] == '+'){ x=0; while(IntList[x] != '\0'){ num1 = num1 + (IntList[x]*j); j=j*10; x++; //printf("%d\n",IntList[x]); } } else{ while(IntList[x] != '\0'){ num2 = num2 + (IntList[x] * (-j)); j=j*10; x++; //printf("%d\n",IntList[x]); } } i++; } printf("%d\n",num1); //プログラム終了 return 0; } コード
あなたの回答
tips
プレビュー