質問:カッコ同士がペアかどうか識別したいのですが”(”や”}”などに
c
1int "("=1;
などして数値を入れることはできますか?
イメージ的には”(”に1、”(”に-1いれて足して0になったらペア成立にしたいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/05/14 13:17
2020/05/14 13:17
2020/05/14 13:19
回答3件
0
こんなものを書いてみました。
C
1#include <stdio.h> 2#include <string.h> // strchr 3 4const char pa[] = "([{", ren[] = ")]}", *p; 5char c; 6 7void paren(void) 8{ 9 while ((c = *p++) && !strchr(ren, c)) { 10 char *q = strchr(pa, c); 11 if (q) { 12 char d = ren[q - pa]; 13 paren(); 14 c = c==d ? *p++ : 1; 15 break; 16 } 17 } 18} 19 20int check(const char *s) { return p = s, paren(), c; } 21 22int main(void) 23{ 24 char s[1024]; 25 while (printf(">> "), scanf("%s", s) == 1 && *s != '.') 26 puts(check(s) ? "NG" : "OK"); 27}
実行例
>> 3*(5+7) OK >> 1/{3*(5+7)} OK >> )4+6( NG >> (1+{3+5)+7} NG >> .
追記
入力にスペースを許すためには scanf("%s", s) == 1 を
fgets(s, sizeof s, stdin) に変更したほうが良いでしょう。
追記2
(1+2)*(3-4) が NG になったので、修正します。
C
1#include <stdio.h> 2#include <string.h> // strchr 3 4const char pa[] = "([{", ren[] = ")]}", *p; 5char c, err; 6 7void paren(void) 8{ 9 while (!err && (c = *p++) && !strchr(ren, c)) { 10 char *q = strchr(pa, c); 11 if (q) { 12 char d = ren[q - pa]; 13 paren(); 14 if (c != d) err = 1; 15 } 16 } 17} 18 19int check(const char *s) { return p = s, err = 0, paren(), err || c; } 20 21int main(void) 22{ 23 char s[1024]; 24 while (printf(">> "), fgets(s, sizeof s, stdin) && *s != '.') 25 puts(check(s) ? "NG" : "OK"); 26}
まだバグがあるかもしれません。
投稿2020/05/18 00:52
編集2020/05/18 09:20総合スコア8224
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
自己解決
C
1int cmp(char *x){ 2 int scr; 3 if(strcmp(x,"(") == 0){ 4 scr = 1; 5 }else if(strcmp(x,")") == 0){ 6 scr = -1; 7 }else if(strcmp(x,"{") == 0){ 8 scr = 2; 9 }else if(strcmp(x,"}") == 0){ 10 scr = -2; 11 }else if(strcmp(x,"[") == 0){ 12 scr = 3; 13 }else if(strcmp(x,"]") == 0){ 14 scr = -3; 15 } 16 return scr; 17}
のように関数を作った。
投稿2020/05/14 13:19
総合スコア26
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/14 13:38
2020/05/17 13:27
2020/05/17 13:30 編集
2020/05/17 13:32
2020/05/17 13:33
2020/05/17 13:46
2020/05/17 13:47
2020/05/17 14:02
2020/05/17 22:59
2020/05/18 00:12 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。