C言語
1#include <stdio.h> 2#include <stdlib.h> 3void get_Greek_Mathsymbol(char *arg); 4void get_Lgreek(char *arg); 5void get_Subscript(char *arg); 6void get_Superscript(char *arg); 7 8 9int main( int argc, char *argv[] ) 10{ 11 if(argc>9) { 12 printf("Illegal number of argument.\n"); 13 return(-1); 14 } 15 int k,a; 16 17 for(k=1; k<argc; k++){ 18 19 get_Greek_Mathsymbol(argv[k]); 20 get_Lgreek(argv[k]); 21 get_Subscript(argv[k]); 22 get_Superscript(argv[k]); 23 24 } 25 26for(a=1; a<=argc; a++){ 27printf("%s\n", argv[a]); 28} 29return 0; 30} 31 32void get_Greek_Mathsymbol(char *arg){ 33 34char 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"}; 35 36static int Cnt1 = 0; 37int cnt1 = 0; 38 39if(*arg == '\' ) 40{ arg++; 41while(*arg != '\0'){ // これをすべての文字についてループ 42 43 44if(*arg != greek[Cnt1][cnt1]){ 45 break; 46} 47else if((*(arg+1) == '\0') || (*(arg+1) == '_') || (*(arg+1) == '^')){ 48 *(arg-cnt1-1) = '&'; 49 if(*arg == 'q'){ 50 *arg = '\0'; 51 } 52} 53 54else{ 55 arg++, cnt1++; 56 continue; 57} 58 59} 60 61} 62Cnt1++; 63} 64 65void get_Lgreek(char *arg){ 66 67char Greek[][10] = {"Alpha", "Beta", "Gamma", "Epsilon", "Zeta", "Eta", "Iota", "Kappa", "Mu", "Nu", "Rho", "Tau", "Chi", "omicron"}; 68static int Cnt2 = 0; 69int i = 0; 70 71if((*arg == Greek[Cnt2][0]) && ((*(arg+1) == '\0') || (*(arg+1) == '_') || (*(arg+1) == '^'))){ 72 *arg = '&'; 73 arg++; 74while(Greek[Cnt2][i] != '\0'){ 75 *arg = Greek[Cnt2][i]; 76 arg++ ,i++; 77 } 78} 79Cnt2++; 80} 81 82 83 84 85 86 87 88 89void get_Subscript(char *arg){ 90 char rest1[10] ; 91 int i, j, l, m; 92 int cnt2 = 0; 93 char subscript[][10] = {"<sub>", "</sub>"}; 94 95 if(*arg == '_'){ 96 arg++; 97 for(i=0; i<=9; i++){ 98 99 if((*arg == '\0') || (*arg == '^')){ 100 break; 101 } 102 rest1[i] = *arg; 103 arg++, cnt2++; 104 } 105 106 107 108for(j=0; subscript[0][j] != '\0'; j++){ 109*(arg-cnt2-1+j) = subscript[0][j]; 110} 111for(l=0; l<cnt2; l++){ 112*(arg-cnt2+4+l) = rest1[l]; 113} 114for(m=0; subscript[1][m] != '\0'; m++){ 115*(arg+4+m) = subscript[1][m]; 116} 117 } 118else{ 119 arg++; 120 } 121 122 123 124 } 125 126void get_Superscript(char *arg){ 127 char rest2[10] ; 128 int i, j, l, m; 129 int cnt3 = 0; 130 char *superscript[] = {"<sup>", "</sup>"}; 131 if(*arg == '_'){ 132 arg++; 133 for(i=0; i<=9; i++){ 134 135 if(*arg == '\0'){ 136 break; 137 } 138 rest2[i] = *arg; 139 arg++, cnt3++; 140 } 141 142 143 144 for(j=0; superscript[0][j] != '\0'; j++){ 145 *(arg-cnt3-1+j) = superscript[0][j]; 146 } 147 for(l=0; l<cnt3; l++){ 148 *(arg-cnt3+4+l) = rest2[l]; 149 } 150 for(m=0; superscript[1][m] != '\0'; m++){ 151 *(arg+4+m) = superscript[1][m]; 152 153 } 154 } 155 else{ 156 arg++; 157 } 158}
実現したいこと
このコードはなぜ実行できないのでしょうか?
TeXの数式モードで書かれた文字列を与え、HTMLに変換するプログラムを作成するという問題です。
どのように修正すれば実行できるでしょうか?
\alphaなら&alpha
Aなら&Alpha
x_1^2ならx<sub>1</sub><sup>2</sup>みたいな感じです
発生している問題・エラーメッセージ
eclispeではエラーはでるのですが、例えばコマンドライン引数を、\alpha \beta x_1^2 とした場合、結果は
alpha beta x_1^2 と入力のままになります。
実行できないとはどういうふうになるんでしょうか。
エラーメッセージが出るならそれを提示しましょう
また、このままではコードが見づらいので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
申し訳ありませんでした。修正しました。
回答2件
あなたの回答
tips
プレビュー