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

質問編集履歴

2

問題内容の追加

2021/01/17 13:02

投稿

tumayouji
tumayouji

スコア0

title CHANGED
File without changes
body CHANGED
@@ -2,12 +2,13 @@
2
2
 
3
3
  c言語を用いてtexの数式モードであらわされたものをhtmlの数式に変換するというプログラムを作成しています
4
4
  条件はギリシャ文字と上付き、下付き文字の変換ですなぜうまくいかないのでしょうか。
5
+ また、この機能を実現したいとき、どのようなコードを書けばよいのでしょうか
5
6
 
6
7
 
7
8
  ### 発生している問題・エラーメッセージ
8
9
 
9
10
  ```
10
- \alpha x_1とコマンドラインで実行すると &alpha x<sub>1</sub>と出力してほしいが alpha x_1という出力結果になる
11
+ \alpha x_1とコマンドラインで実行すると &alpha x<sub>1</sub>と出力してほしいが alpha x_1という出力結果になる そもそもこのコードは欠陥が多い気がします
11
12
  ```
12
13
 
13
14
  ### 該当のソースコード

1

コードの見易さの改善、具体的な例の追加

2021/01/17 13:01

投稿

tumayouji
tumayouji

スコア0

title CHANGED
File without changes
body CHANGED
@@ -7,7 +7,7 @@
7
7
  ### 発生している問題・エラーメッセージ
8
8
 
9
9
  ```
10
- 変換うまく
10
+ \alpha x_1とコマンドラインで実行すると &alpha x<sub>1</sub>と出力してほしい alpha x_1とう出力結果に
11
11
  ```
12
12
 
13
13
  ### 該当のソースコード
@@ -20,157 +20,147 @@
20
20
  void get_Subscript(char *arg);
21
21
  void get_Superscript(char *arg);
22
22
 
23
+ int main(int argc, char *argv[]) {
24
+ if (argc > 9) {
25
+ printf("Illegal number of argument.\n");
26
+ return (-1);
27
+ }
28
+ int k, a;
23
29
 
24
- int main( int argc, char *argv[] )
30
+ for (k = 1; k < argc; k++) {
25
- {
26
- if(argc>9) {
27
- printf("Illegal number of argument.\n");
28
- return(-1);
29
- }
30
- int k,a;
31
31
 
32
+ get_Greek_Mathsymbol(argv[k]);
33
+ get_Lgreek(argv[k]);
32
- for(k=1; k<argc; k++){
34
+ get_Subscript(argv[k]);
35
+ get_Superscript(argv[k]);
33
36
 
34
- get_Greek_Mathsymbol(argv[k]);
35
- get_Lgreek(argv[k]);
37
+ }
36
- get_Subscript(argv[k]);
37
- get_Superscript(argv[k]);
38
38
 
39
+ for (a = 1; a <= argc; a++) {
40
+ printf("%s\n", argv[a]);
39
- }
41
+ }
40
-
41
- for(a=1; a<=argc; a++){
42
+ return 0;
42
- printf("%s\n", argv[a]);
43
43
  }
44
- return 0;
45
- }
46
44
 
47
- void get_Greek_Mathsymbol(char *arg){
45
+ void get_Greek_Mathsymbol(char *arg) {
48
46
 
49
- char greek[][10] = {"alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "theta", "iota", "kappa", "lambda", "mu", "nu", "xi", "pi", "rho", "sigma", "tau", "upsilon", "phi", "chi", "psi", "omega", "Gamma", "Delta", "Theta", "Lambda", "Xi", "Pi", "Sigma", "Upsilon", "Phi", "Psi", "Omega" "geq", "leq"};
47
+ char greek[][10] = { "alpha", "beta", "gamma", "delta", "epsilon", "zeta",
48
+ "eta", "theta", "iota", "kappa", "lambda", "mu", "nu", "xi", "pi",
49
+ "rho", "sigma", "tau", "upsilon", "phi", "chi", "psi", "omega",
50
+ "Gamma", "Delta", "Theta", "Lambda", "Xi", "Pi", "Sigma", "Upsilon",
51
+ "Phi", "Psi", "Omega" "geq", "leq" };
50
52
 
51
- static int Cnt1 = 0;
53
+ static int Cnt1 = 0;
52
- int cnt1 = 0;
54
+ int cnt1 = 0;
53
55
 
54
- if(*arg == '\' )
56
+ if (*arg == '\') {
55
- { arg++;
57
+ arg++;
56
- while(*arg != '\0'){ // これをすべての文字についてループ
58
+ while (*arg != '\0') { // これをすべての文字についてループ
57
59
 
60
+ if (*arg != greek[Cnt1][cnt1]) {
61
+ break;
62
+ } else if ((*(arg + 1) == '\0') || (*(arg + 1) == '_')
63
+ || (*(arg + 1) == '^')) {
64
+ *(arg - cnt1 - 1) = '&';
65
+ if (*arg == 'q') {
66
+ *arg = '\0';
67
+ }
68
+ }
58
69
 
70
+ else {
59
- if(*arg != greek[Cnt1][cnt1]){
71
+ arg++, cnt1++;
60
- break;
72
+ continue;
61
- }
73
+ }
62
- else if((*(arg+1) == '\0') || (*(arg+1) == '_') || (*(arg+1) == '^')){
63
- *(arg-cnt1-1) = '&';
64
- if(*arg == 'q'){
65
- *arg = '\0';
66
- }
67
- }
68
74
 
69
- else{
70
- arg++, cnt1++;
71
- continue;
72
- }
75
+ }
73
76
 
77
+ }
78
+ Cnt1++;
74
79
  }
75
80
 
76
- }
77
- Cnt1++;
81
+ void get_Lgreek(char *arg) {
78
- }
79
82
 
83
+ char Greek[][10] = { "Alpha", "Beta", "Gamma", "Epsilon", "Zeta", "Eta",
84
+ "Iota", "Kappa", "Mu", "Nu", "Rho", "Tau", "Chi", "omicron" };
80
- void get_Lgreek(char *arg){
85
+ static int Cnt2 = 0;
86
+ int i = 0;
81
87
 
82
- char Greek[][10] = {"Alpha", "Beta", "Gamma", "Epsilon", "Zeta", "Eta", "Iota", "Kappa", "Mu", "Nu", "Rho", "Tau", "Chi", "omicron"};
83
- static int Cnt2 = 0;
88
+ if ((*arg == Greek[Cnt2][0])
84
- int i = 0;
85
-
86
- if((*arg == Greek[Cnt2][0]) && ((*(arg+1) == '\0') || (*(arg+1) == '_') || (*(arg+1) == '^'))){
89
+ && ((*(arg + 1) == '\0') || (*(arg + 1) == '_')
90
+ || (*(arg + 1) == '^'))) {
87
- *arg = '&';
91
+ *arg = '&';
88
- arg++;
92
+ arg++;
89
- while(Greek[Cnt2][i] != '\0'){
93
+ while (Greek[Cnt2][i] != '\0') {
90
- *arg = Greek[Cnt2][i];
94
+ *arg = Greek[Cnt2][i];
91
- arg++ ,i++;
95
+ arg++, i++;
92
- }
96
+ }
97
+ }
98
+ Cnt2++;
93
99
  }
94
- Cnt2++;
95
- }
96
100
 
101
+ void get_Subscript(char *arg) {
102
+ char rest1[10];
103
+ int i, j, l, m;
104
+ int cnt2 = 0;
105
+ char subscript[][10] = { "<sub>", "</sub>" };
97
106
 
107
+ if (*arg == '_') {
108
+ arg++;
109
+ for (i = 0; i <= 9; i++) {
98
110
 
111
+ if ((*arg == '\0') || (*arg == '^')) {
112
+ break;
113
+ }
114
+ rest1[i] = *arg;
115
+ arg++, cnt2++;
116
+ }
99
117
 
118
+ for (j = 0; subscript[0][j] != '\0'; j++) {
119
+ *(arg - cnt2 - 1 + j) = subscript[0][j];
120
+ }
121
+ for (l = 0; l < cnt2; l++) {
122
+ *(arg - cnt2 + 4 + l) = rest1[l];
123
+ }
124
+ for (m = 0; subscript[1][m] != '\0'; m++) {
125
+ *(arg + 4 + m) = subscript[1][m];
126
+ }
127
+ } else {
128
+ arg++;
129
+ }
100
130
 
131
+ }
101
132
 
133
+ void get_Superscript(char *arg) {
134
+ char rest2[10];
135
+ int i, j, l, m;
136
+ int cnt3 = 0;
137
+ char *superscript[] = { "<sup>", "</sup>" };
138
+ if (*arg == '_') {
139
+ arg++;
140
+ for (i = 0; i <= 9; i++) {
102
141
 
142
+ if (*arg == '\0') {
143
+ break;
144
+ }
145
+ rest2[i] = *arg;
146
+ arg++, cnt3++;
147
+ }
103
148
 
149
+ for (j = 0; superscript[0][j] != '\0'; j++) {
150
+ *(arg - cnt3 - 1 + j) = superscript[0][j];
151
+ }
104
- void get_Subscript(char *arg){
152
+ for (l = 0; l < cnt3; l++) {
105
- char rest1[10] ;
153
+ *(arg - cnt3 + 4 + l) = rest2[l];
106
- int i, j, l, m;
107
- int cnt2 = 0;
154
+ }
108
- char subscript[][10] = {"<sub>", "</sub>"};
155
+ for (m = 0; superscript[1][m] != '\0'; m++) {
156
+ *(arg + 4 + m) = superscript[1][m];
109
157
 
158
+ }
110
- if(*arg == '_'){
159
+ } else {
111
- arg++;
160
+ arg++;
112
- for(i=0; i<=9; i++){
113
-
114
- if((*arg == '\0') || (*arg == '^')){
115
- break;
116
- }
161
+ }
117
- rest1[i] = *arg;
118
- arg++, cnt2++;
119
- }
120
-
121
-
122
-
123
- for(j=0; subscript[0][j] != '\0'; j++){
124
- *(arg-cnt2-1+j) = subscript[0][j];
125
162
  }
126
- for(l=0; l<cnt2; l++){
127
- *(arg-cnt2+4+l) = rest1[l];
128
- }
129
- for(m=0; subscript[1][m] != '\0'; m++){
130
- *(arg+4+m) = subscript[1][m];
131
- }
132
- }
133
- else{
134
- arg++;
135
- }
136
163
 
137
-
138
-
139
- }
140
-
141
- void get_Superscript(char *arg){
142
- char rest2[10] ;
143
- int i, j, l, m;
144
- int cnt3 = 0;
145
- char *superscript[] = {"<sup>", "</sup>"};
146
- if(*arg == '_'){
147
- arg++;
148
- for(i=0; i<=9; i++){
149
-
150
- if(*arg == '\0'){
151
- break;
152
- }
153
- rest2[i] = *arg;
154
- arg++, cnt3++;
155
- }
156
-
157
-
158
-
159
- for(j=0; superscript[0][j] != '\0'; j++){
160
- *(arg-cnt3-1+j) = superscript[0][j];
161
- }
162
- for(l=0; l<cnt3; l++){
163
- *(arg-cnt3+4+l) = rest2[l];
164
- }
165
- for(m=0; superscript[1][m] != '\0'; m++){
166
- *(arg+4+m) = superscript[1][m];
167
-
168
- }
169
- }
170
- else{
171
- arg++;
172
- }
173
- }
174
164
  ```
175
165
 
176
166
  ### 試したこと