• ベストアンサー

#defineの定数を文字列として読み込む

toshiyukの回答

  • toshiyuk
  • ベストアンサー率41% (36/87)
回答No.8

C++ の string を使えばできます。 #include <string> #include <iostream> using namespace std ; string str = "test" ; string str2 = "test2" ; cout << str << "," << str2 << endl ; if ( str != str2 ) cout << "not equal" << endl ;

関連するQ&A

  • defineで定数が置き換えられない?(C言語)

    #defineについて質問です。 #defineは、ソースコード内にこの文字を見つけたら、コンパイルする前にこの文字をこの定数に置き換えて、というプリプロセッサですよね?だから、printfで#defineで定義した定数を出力する場合で、変換指定が必要ない場合は #include <stdio.h> #define DEF 100 void main(){ printf("#defineで定義された定数はDEFです"); } でもいいと思うんです。ですがこのソースコードは間違いで、実行結果は #defineで定義された定数はDEFです(←置き換えられてない) となってしまします。プリプロセッサだけ実行しても、DEFは100に置き換えられずそのままです。printfで#defineで定義した定数を出力させたい場合は書式指定をしなければなりません。なぜ、このような場合は#defineで定義した定数は置き換えられないのでしょうか?回答よろしくお願いします。

  • IF関数の論理式が文字列??

    他人が作成したエクセル関数式を理解したいのですが、どう調べたものか手の付け所がわからず、質問をさせて頂きます。 関数は以下の様なものです(<XXX_YYY_10000>の部分はデフォルメしていますが、 XXX,YYY,1000はそれぞれもともと文字列と数字です)。 =IF(OR(A1="",A1<XXX_YYY_10000-2),1,IF(AND(A1>XXX_YYY_10000-2,A1<XXX_YYY_10000),2,IF(A1>=XXX_YYY_10000,3,1))) どなたか詳しいかた、この関数の動作について簡単で結構ですのでご教示頂けないでしょうか。 特に、論理式が<XXX_YYY_10000-2>の様に文字列と数字が混じっており、何を条件としているのか見当つかず躓いています。 すごく頓珍漢な質問をしている様な気もするのですが宜しくお願い致します。

  • $XXX を含んだ文字列の評価

    '$XXX + $yyy' という文字列($XXXと$yyyは単なる文字列)を評価したものを別の変数に格納したいのですがどうすればいいでしょう。 <?php $XXX = 10 ; $yyy = 5 ; $str = '$XXX + $yyy' ; $ans = なんとか文字列を評価; echo $ans ; ?> 表示 -- 15

    • ベストアンサー
    • PHP
  • 文字列内で定数を使いたいときに手間がかかる

    文字列内で定数を使いたいときにこういう手法があります。 $a = function($t){ return $t }; echo "{$a(TEISUU)}"; これをいろんな関数内でも気軽に使いたいのですが、いざやってみると  ・必要な場所で毎回上記を定義する  ・ライブラリ関数として別個定義しインクルードしておいて、使いたい関数内でglobal宣言する  ・$GLOBALSを使う このようにいずれも余計な手間や見た目が雑になってしまい使い勝手が悪いです。 どの関数内でも手間いらずで「$a(定数)」を使う方法はないでしょうか。

    • ベストアンサー
    • PHP
  • 文字列(丸数字)の文字化けについて

    今自分で関数を作成しているのですが、文字列(丸数字)の文字化けにかなり苦しんでいます。 (※注※)これ以降(1)など()の中に数字を入れて記述しているものは実際のソースコード上では丸数字で記入してます。教えてgooでは丸数字が記述できないようでして… 関数の内容としては、(1)あ(2)い(3)う……このように丸数字で区切られている文字列を配列名を$dataとすると、$data[0]には「あ」、$data[1]には「い」、$data[2]には「う」が入るような関数を作成しています。 この丸数字の数は(10)まで対応させようと考えてます。 実際のソースは function bunkai($str1){ if (strstr($str1, "(10)") != NULL){ define("kugiri","(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)"); // 区切り文字 }else if (strstr($str1, "(9)") != NULL){ define("kugiri","(1)(2)(3)(4)(5)(6)(7)(8)(9)"); // 区切り文字 }else if (strstr($str1, "(8)") != NULL){ define("kugiri","(1)(2)(3)(4)(5)(6)(7)(8)"); // 区切り文字 }else if (strstr($str1, "(7)") != NULL){ define("kugiri","(1)(2)(3)(4)(5)(6)(7)"); // 区切り文字 }else if (strstr($str1, "(6)") != NULL){ define("kugiri","(1)(2)(3)(4)(5)(6)"); // 区切り文字 }else if (strstr($str1, "(5)") != NULL){ define("kugiri","(1)(2)(3)(4)(5)"); // 区切り文字 }else if (strstr($str1, "(4)") != NULL){ define("kugiri","(1)(2)(3)(4)"); // 区切り文字 }else if (strstr($str1, "(3)") != NULL){ define("kugiri","(1)(2)(3)"); // 区切り文字 }else if (strstr($str1, "(2)") != NULL){ define("kugiri","(1)(2)"); // 区切り文字 }else if (strstr($str1, "(1)") != NULL){ define("kugiri","(1)"); // 区切り文字 } $count = 0; $token = strtok($str1, kugiri); while ($token) { $data[$count] = $token; $token = strtok(kugiri); $count++; } $data[$count] = NULL; return $data; } なんですが、 $str1に"(3)した(名)(4)しも(名)(5)もと(名)(6)さ-げる(動ガ下一)(7)さ-がる(動ガ下一)(8)くだ-る(動ラ五[四])(9)くだ-す(動サ五[四])(10)くだ-さる(動ラ五[四])"という文字列を入れて $dataを表示させてみると $data[0]=した(名) $data[1]=しも(名) ここまではできるのですが、これ以降 $data[2]=も� $data[3]=(名) $data[4]=さ-げる(動ガ下一) $data[5]=さ-がる(動ガ下一) $data[6]=く� $data[7]=-る(動� : : となってしまい、ところどころでうまく丸数字を読み込めていません。特に$str1に違う文字列をいれてみても(1)(2)(3)(4)まではきちんと読み込めてその後の(5)でまず最初の文字化けが絶対発生してしまいます。でも(5)を通過したあとの(6)(7)はきちんと判別していたりとよく原因がわかりません……。 がんばってexplode関数で同じようなことしてもいいかなと考えているのですが、関数自体が長くなってしまうので、めんどくさいなーと思います。 どなたか、このバグの原因がわかるかた、または、こんな関数を使ってこんなことしたら丸数字を判別して配列に入れることができるよーという意見もあったら欲しいです。 お願いします。困ってます。

    • ベストアンサー
    • PHP
  • プログラミング ポインタを使った文字列比較

    プログラミング ポインタを使った文字列比較 2つの文字列str1, str2を入力し,それらが等しければ0,等しくなければ1を返す関数str_compareを作り、返り値によって以下のように表示するプログラムを作れ。ただし,関数strcmpを使ってはならない。 文字列の入出力はmain関数で行い,関数str_compareの仮引数にはポインタ変数を宣言し,ポインタと間接演算子*を用いた処理を行うこと。 % ./a.out input str1 = Worldcup input str2 = Worldcup same strings % ./a.out input str1 = World input str2 = cup different strings この問題に私は次のようにプログラミングしました。 #include <stdio.h> #define MAX 100 int str_compare(char *, char *); main() { char str1[MAX], str2[MAX]; printf("input str1 = %s", str1); scanf("%s", str1); printf("input str2 = %s", str2); scanf("%s", str2); str_compare(str1, str2); if (str_compare(str1, str2) == 0) printf("same strings\n"); else if (str_compare(str1, str2) == 1) printf("different strings\n"); } int str_compare(char *s1, char *s2) { int i; for (i = 0; s1[i] != '\0'; i++) { if (s1[i] != s2[i]) { break; } } if (s1[i] == s2[i]) { return 0; } else { return 1; } } これで実行したところ、「input str1 =」の右のスペースが文字化け?してしまいます。(半角カタカナや記号が出る)ただ、その後に文字列を入力すると、正しく機能します。 これは何が悪いなのでしょうか、どなたか教えてください。

  • scanfでの読み込み文字数制限

    scanf( "%10s" , file_name ); とすればfile_nameに読み込む文字数を10バイトに制限できるそうですが、10のところに定数(defineで定義したもの)を指定することはできないのでしょうか? 普通に #define NUM 10 scanf( "%NUMs" , file_name ); としてもできないようでした。

  • 文字列の扱い方

    初歩的な質問ですみません… str文字列からcという文字を見つけたら添字を返すという関数を作ったのですが、 iにこの関数を代入して、if文の制御式にiを使って比較するまでは正常なのですが、 真文にiを使うと何故か偽文(という言い方でいいのでしょうか…この場合("そんな値はありません。"というところです)が実行されてしまいます。 よろしければご教授お願い致します。 #include <stdio.h> int str_char(const char str[],int c) { int len = strlen(str); int i; for (i = 0;i < len;i++) { if (str[i] == c) return i; } return -1; } int main() { char str[64] = "Fucking Brutal Death Metal"; int ch,i; printf("どの文字を調べますか?"); scanf("%c",&ch); i = str_char(str,ch); if (i >= 0) printf("その文字は%d番目にあります。",str_char(str,ch) + 1); //何故かiだと動かない else printf("そんな値はありません。"); return 0; }

  • 定数の定義方法 #define

    いつもお世話になっております。 定数を定義したいのですが、 その数値が符号無し長整数の場合どのように 定義すれば宜しいのでしょうか。 符号有りの場合は特に指定しなくても宜しいのですか。 どうぞ宜しくお願いします。

  • ワードの置換で、文字列の前後に文字を追加

    ワードの置換について教えてください。 http://xxx/yyy/zzz という文字列があった場合、これを ABC-http://xxx/yyy/zzz-001 というように前後に文字列を追加したい場合はどうすれがいいのでしょうか? よろしくお願いします。