質問するログイン新規登録

質問編集履歴

1

コードの書き忘れ

2015/10/11 06:44

投稿

akamakku
akamakku

スコア191

title CHANGED
File without changes
body CHANGED
@@ -4,4 +4,94 @@
4
4
  printf("\n");
5
5
  これです。
6
6
 
7
- どんな理由が考えられますか?
7
+ どんな理由が考えられますか?
8
+
9
+ ```C
10
+ #include <stdio.h>
11
+ #include <string.h>
12
+ #include <ctype.h>
13
+
14
+ void shift(char str[], int n){
15
+ int i = 0, j;
16
+ for(j = 0; j < n; j++){
17
+ while(str[i] != '\0'){
18
+ str[i] = str[i+1];
19
+ i++;
20
+ }
21
+ i = 0;
22
+ }
23
+ }
24
+
25
+
26
+ void devideStr(char str[], char ret[], int s, int e){
27
+ int i;
28
+ for(i = s; i <= e; i++){
29
+ ret[i - s] = str[i];
30
+ }
31
+ ret[i] = '\0';
32
+ }
33
+
34
+ int chemsymToMolWeight(char chemsym[]){
35
+ int ret;
36
+ if(strcmp(chemsym,"A") == 0){
37
+ ret = 2;
38
+ }
39
+ if(strcmp(chemsym,"Bc") == 0){
40
+ ret = 3;
41
+ }
42
+ if(strcmp(chemsym,"De") == 0){
43
+ ret = 4;
44
+ }
45
+ if(strcmp(chemsym,"F") == 0){
46
+ ret = 5;
47
+ }
48
+ return ret;
49
+ }
50
+
51
+ int strToMolWeight(char chemform[]){
52
+ int MW=0, tmp, p = 0, c, n = 1;
53
+ char chemsym[3], ret[50], num[50];
54
+ while(chemform[0] != '\0'){
55
+ if(isupper(chemform[0])){
56
+ chemsym[p++] = chemform[0];
57
+ shift(chemform, 1);
58
+ if(islower(chemform[0])){
59
+ chemsym[p++] = chemform[0];
60
+ shift(chemform, 1);
61
+ }
62
+ chemsym[p] = '\0';
63
+ p = 0;
64
+ tmp = chemsymToMolWeight(chemsym);
65
+ }else if(chemform[0] == '('){
66
+ for(c = 1; chemform[c] != ')'; c++);
67
+ devideStr(chemform, ret, 1, c-1);
68
+ tmp = strToMolWeight(ret);
69
+ shift(chemform, c+1);
70
+ }
71
+ if(isdigit(chemform[0])){
72
+ while(isdigit(chemform[0])){
73
+ num[p++] = chemform[0];
74
+ shift(chemform, 1);
75
+ }
76
+ num[p] = '\0';
77
+ n = atoi(num);
78
+ p = 0;
79
+ }
80
+ tmp *= n;
81
+ MW += tmp;
82
+ n = 1;
83
+
84
+
85
+ }
86
+ return MW;
87
+ }
88
+
89
+ int main(){
90
+ char chemform[] = "A2(A23Bc)2";
91
+ printf("\n"); //ここです!
92
+ int MW;
93
+ MW = strToMolWeight(chemform);
94
+ printf("MolWeight = %d\n",MW);
95
+ return 0;
96
+ }
97
+ ```