• ベストアンサー

構造体の一部の値を取得する方法

下記のサイトで http://www.isl.ne.jp/pcsp/beginC/C_Language_14.html 例えば、例題4で 武田信玄の"武"だけを取得するやり方はありますか? イメージとしては2行目の2個目とか3個目の文字を取得するという意味です。 ポインタを使えばできそうな気がしますがどのように行ってよいかわっからないです。 宜しくお願いしんす。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wap58
  • ベストアンサー率33% (29/87)
回答No.2

構造体へのアクセスはサイトに書いてますよー ポインターもサイトの13章に書かれてますよー 参照だけならポインターでいいけど書き換えるなら配列使う char *name_1 = "武田 信玄"; char name_2[10]; name_2[0] = name_1[2]; name_2[1] = name_1[3]; name_2[2] = '\0'; printf("%c%c %s\n",name_1[0],name_1[1],name_2); Win DOS窓 SJIS なら%c%cで表示されます

EGA4545
質問者

お礼

ありがとうございます。

その他の回答 (2)

  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.3

>old[2][x]みたいなかんじです。 例題4の構造体OLDはnameがchar *ですので、それはできません。 「(3)構造体の初期化」にある構造体studentのようにnameがcharの配列でしたらできはしますが悪手です。 あなたの質問の仕方が悪かったわけではなく悪手ですので、それを回答として真っ先にあげるような回答者はいないはずです。

  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.1

文字コードがShiftJISやEUC-JPなどの"武"が2バイトで表現される文字コードでしたら、 char c1 = old[1].name[0]; char c2 = old[1].name[1]; で、参照はできます。

EGA4545
質問者

お礼

ありがとうございます。

EGA4545
質問者

補足

私の説明が悪かったです。 .name[0]とかではなく、行の先頭からx番目の値を取得したいのです。 old[2][x]みたいなかんじです。 宜しくお願いします。

関連するQ&A

  • 構造体の変数の値を、動的に取得する方法を教えてください

    C言語で、構造体の変数の値を取得したいのですが、その際、 他の変数に格納してある文字列を元に動的に行いたいのですが、可能でしょうか? イメージとしては、 struct Entry{ char name[20]; char address[80]; char email[40]; }; struct Entry data; strcpy(data.name, "Taro"); strcpy(data.address, "Tokyo"); strcpy(data.email, "taro@taro"); char var_name[20]; strcpy(var_name, "email"); printf("%s", data.var_name); ↑この行の構造体の変数へのアクセス方法が間違っているのはわかっていますが、このような時に「taro@taro」と出力させたいのです。 var_nameの値を「name, address, email」に換える事により「Taro, Tokyo, taro@taro」と出力を切り換えたいと思っています。 普段は他の言語をよく使用しており、そちらではこの手法を時々使っていたのですが、C言語でも出来ないものかと思っております。 よろしくお願いします。

  • C言語でファイルをよんだあとの料理方法

    基本的に.NETしか知りませんので、C言語でAPIのReadFile使用して ファイルを一気に全部バッファ読み込んだあと、 バッファから文字を一つずつ取り出すにはどうしたら いいでしょうか? Unicodeを使用することが前提で結構です。 なんか、根本的にわかってませんので。。。 よろしくお願いします。 C#とかなら、文字をインデックスで取得できますので、 C/C++となるとまったく、イメージできません。。。 ポインタを移動することで一バイトずつ操作することくらいは理解してます。

  • 構造体へのポインタについて

    初心者です。 C入門書の著者のサポートページには正誤表とダウンロードしかないためこちらで質問させていただきます。 下記のコードの下から二行目の構造体へのポインタ (Car *) について、中学生に説明するように基本的な考え方、目的、書式、参考URLなどを教えて下さい。 ポインタについては、該当の章を読み直し基本事項については理解しておりますが、突然あるページから(Void *)や(Char *)など括弧で閉じるものが説明なしに出てきてちょっと混乱してます。(汗 どうぞ宜しくお願い致します。 #include<stdio.h> /* 構造体型struct Carの宣言 */ typedef struct Car{ int num; double gas; }Car; int main(void) { printf("int型のサイズは%dバイトです。¥n", sizeof(int)); printf("double型サイズは%dバイトです。¥n", sizeof(double)); printf("構造体structCar型のサイズは%dバイトです。¥n", sizeof(Car)); printf("構造体struct Car型へのポインタのサイズは%dバイトです。¥n", sizeof(Car *)); return 0; }

  • C言語の文字列を含んだ構造体

    下記のサイトに構造体のことが書かれています。 http://www.isl.ne.jp/pcsp/beginC/C_Language_14.html その中の (3)構造体の初期化 の記述で  //構造体の型宣言  struct student{   int no; // 学籍番号   char name[256]; // 氏名   int year; // 学年   char student_class[256]; // クラス  }; と書かれています。 次の(4)構造体のデータ参照では、  //構造体の型宣言  struct OLD{   int no; //番号   char *name; //名前   int s_year; //年   char s_class; //クラス  }; と書かれています。 ここで質問です。 前者の名前は char name[256] ですが、 後者の名前は char *name になっています。 name[256] と *name では何が違うのでしょうか? どういうときに使い分けるのでしょうか?

  • HTML内の値を取得し、別の箇所にコピーする方法

    下記のソースで書き換え実行ボタンを押下すると、2行目の表示内容を1行目にコピーした上で、2行目の内容を削除したいと思いました。 2行目の内容の削除は下記の3行で出来ていると思います。 $("#text2_1").html(""); $("#text2_2").val(""); $("#text2_3").val(""); ただし、2行目の内容を1行目にコピーする所がわかりませんでした。 $("#text1_1").html("2行目"); $("#text1_2").val("2行目"); $("#text1_3").val("2行目"); 上記3行の「2行目」と固定で記述されている箇所の代わりに、下記3行の値を取得する記述をしないといけないのかと思ったのですが、どのように記述すればよいかわからなかったのでアドバイスいただける方がいらっしゃいましたら、ご教示の程、よろしくお願いします。 <div id="text2_1">2行目</div> <input type="text" name="text2_2" id="text2_2" value="2行目" /> <input type="hidden" name="text2_3" id="text2_3" value="2行目" /> 【ソース】 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script language="JavaScript" type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> <!-- $(function(){ $("#change").click(function(){ $("#text1_1").html("2行目"); $("#text1_2").val("2行目"); $("#text1_3").val("2行目"); $("#text2_1").html(""); $("#text2_2").val(""); $("#text2_3").val(""); }); }); // --> </script> <title>title</title> </head> <body> <form> <input id="change" type="button" value="書き換え実行" /> </form> <br /> <div id="text1_1">1行目</div> <input type="text" name="text1_2" id="text1_2" value="1行目" /> <input type="hidden" name="text1_3" id="text1_3" value="1行目" /> <div id="text2_1">2行目</div> <input type="text" name="text2_2" id="text2_2" value="2行目" /> <input type="hidden" name="text2_3" id="text2_3" value="2行目" /> </body> </html> 以上、宜しくお願いします。

    • ベストアンサー
    • AJAX
  • 音声を取得して取得した文字を出力したい

    タイトルを凄く難しいことをやろうとしているなという印象をうけるかもしれません!! いくつか切り分けて一つずつやっていきたいと思っております。 (1)音声を取得して一時的にデータを格納します。 例えば「まもなく〇〇が〇〇駅に到着します」という音声を一時的に保存します。 (2)音声取得した言葉を文字にして変数に格納します (3)変数に格納した文字を小さな光で表示させます。  イメージ的には会議でプレゼンをするときにあの四角い機械をパソコンにつないで  映像を表示させるあれをもう少しコンパクトにしたものを作りたいです。   どうやら調べていると音声を取得することはC++などでできるようなので現実的には 可能なのかなぁと思ってます。(個人的に作れるかは別としてですが・・・) 細かくにしていくといろいろあるとは思いますが、なんとなくイメージ的には可能かなと 思っております。 まだ、これからやり始めるところなので具体的な案ができておりません。 大体のイメージができているのでこれから勉強の為いろいろ試行錯誤の上を重ねて 作っていきたいと思っております。 言語はVC++??でやろうと思っております。 学校卒業してからはCとかC++は触ってないのでほぼ一から勉強という形となります 音声取得のプログラムをまずは作りたいのでお勧めの書籍や初めてやる人でも これは使えるんじゃねぇというサイトがありましたらご紹介頂けると幸いです。

  • 特定の文字の個数を取得する簡単な方法ありますか?

    タイトルの通りなのですが、1行中の特定の文字の個数を取得し、ある個数の時だけその行を表示させようとしています。例えば特定の文字を":"とし、":"がちょうど5個ある行だけ表示させる場合、splitを使って以下のようなコードを考えましたが、どうもスマートじゃない気がします。しかもこれだと"a:b:c:d:e:"のように、行末が":"になっている場合は、$num=5となってしまい、正しく動作しません。どなたか解決策をお願いいたします。 while(<IN>){ @list = split( /:/ , $_ ); $num = @list; if( $num == 6 ){ print "$_\n"; } }

    • ベストアンサー
    • Perl
  • 特殊なレコードの取得方法

    下記のようなテーブルがあり、 マスタの方は「*」が入っていれば、デフォルト行のような扱いをしたいのです。 ・テーブルの1のデータはマスタのAと完全マッチしているので、Aの行の値が欲しい。 ・テーブルの2のデータはマスタと完全一致はしないが、列4が「*」なのでBの行の値が欲しい。 ・テーブルの3のデータはマスタと完全一致はしないが、列3と列4が「*」なので、Cの行の値が欲しい。 現在は、マスタを別名で完全一致用(m1)、列4が「*」用(m2)、列3と列4が「*」用(m3)の3つをFrom句に記述し、 Select句にて、m1がNULLなら、m2から取得、m2もNULLならm3から取得するというやり方をとっていますが、 実際の「*」がある組み合わせがたくさんあり、それだけインラインビューを用意すると遅くなっているので、 なんとかインラインビュー1つでなんとかならないものでしょうか? テーブル ┌─┬──┬──┬─┐ │01│AAAA│X001│YY│←1 ├─┼──┼──┼─┤ │01│AAAA│X001│ZZ│←2 ├─┼──┼──┼─┤ │01│AAAA│X002│YY│←3 └─┴──┴──┴─┘ マスタ ┌─┬──┬──┬─┐ │01│AAAA│X001│YY│←A ├─┼──┼──┼─┤ │01│AAAA│X001│* │←B ├─┼──┼──┼─┤ │01│AAAA│* │* │←C └─┴──┴──┴─┘

  • 参照セルの式を文字として取得するには

    あるシートのB列に下記の書き込みがしてあります。  A B 1    =単価!C5 2    =単価!C2 3    =単価!C6 4    =単価!C4 セルA1に関数で"単価!C5"と文字で取得したいと思っています。 どなたか教えてください。 A列は同じシートの別な列を参照するのですが、B列の参照セルの行番号は同じにしたいのです。

  • 配列の値を可変変数を用いて取得する方法について

    配列の値を可変変数を用いて取得する方法について 下記のようなソースがあるのですが、$tmp1_1zのような変数の場合、可変変数を用い取得する事は出来たのですが、$hairetsu["tmp2_1z"]のような配列の場合、可変変数を用い取得する事は出来ませんでした。 どちらの例の場合も、$varの中には意図した文字が取得できていると思うのですが、$$varの結果が異なり、どのように記述すれば配列の場合も可変変数の値が取得できるか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 【ソース】 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>title</title> </head> <body> <?php $tmp1_1z = 1; $hairetsu["tmp2_1z"] = 2; $i = 1; $var = 'tmp1_' . $i . 'z'; echo "<p>var=" . $var . "</p>"; echo $tmp1_1z; // 下記は値が取得できます。 echo "<p>\$var=" . $$var . "</p>"; $var = 'hairetsu["tmp2_' . $i . 'z"]'; echo "<p>var=" . $var . "</p>"; echo $hairetsu["tmp2_1z"]; // 下記は値が取得できません。 echo "<p>\$var=" . $$var . "</p>"; ?> </body> </html> 以上、よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう