+ Admin +









スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --/--/-- --:-- ] スポンサー広告 | トラックバック(-) | コメント(-)

文字列と配列その2 

 2・文字列
  上のプログラム1で使用した関数getsは,キーボードから入力したデータを
  配列buffの先頭要素から順に1文字ずつ格納し,さらに終了を表す\0(ヌル文字)を
  一番最後に付加する。

  C言語では,ヌル文字までを文字列といい,文字列は,「連続した文字列であり,
  その範囲を最初はヌル文字の出現までのもと」と定義される。


 3・文字列の出力
   配列に格納された文字列を関数printfで出力する場合,変換指定として「%s」
   を用い,どこから出力するのか出力もとのアドレスを指定する。
   
   1, 上記の配列buffに格納されてる文字列を出力する。
       printf("%s", buff );
                ↑
             配列buffの先頭アドレスを意味する
  結果 TARO   

   2, 上記の配列buffに格納されてる2番目からも文字列から出力する。
       printf("%s", &buff[2] );
               ↑
             配列buffの2番目の要素のアドレスを意味する
      結果 RO 

   3, ヌル文字がない場合の出力
      char str[]={T,A,R,O};
      printf("%s",str);

      結果 配列strにはヌル文字が格納されていないため,「TARO」と出力してた後も,
         関数printfはメモリ上に"\0"(=0)が出現するまで延々と出力する。

      重要
       「%s」は,指定されたアドレスの文字からヌル文字の直前まで出力するという
       指定があるため,ヌル文字がない場合の出力は非常に危険です。


  以下に,文字列に主な変換方法です。
     
     char str[]={A,B,C,D,E,F,\0};

     printf("1%s\n" ,str); ← 桁指定なし(左詰めとなる)
 
     printf("2%-10s\n" ,str);  ← 10桁で左詰,残りは空白
 
     printf("3%10s\n" ,str);    ← 10桁で右詰,残りは空白

     printf("4%+10s\n" ,str); ← 10桁で右詰,残りは空白
    
     printf("5%*s\n" ,10,str);   ← 10桁で右詰,残りは空白

     結果
      1ABCDEFG

      2ABCDEFG△△△
    
      3△△△ABCDEFG

      4△△△ABCDEFG

      5△△△ABCDEFG


    4・文字列のint型への変換
  
      数字文字列を整数値として扱う場合,何らかの方法でその文字列を整数値に
      変換しなければならない。
      ここで,1文字を整数値に変換する場合には,文字の内部コードの性質から, 
      以下の方法で変換することが出来ます。
    
      4-0  ←文字コード-0

      =34*16-30*16

       =4

     また,文字列を整数値に変換する場合,関数atoi(Ascii TO Integer)を  
     使用する。
   
      int age;
      char buff[20]={4,2,\0};
      age=atoi(buff);

                   関数atoi
        文字列"42" → 渡された文字列   変数age
                   を整数値に変換 → 42

      以下に,数値文字列a,bを入力し,加算した結果を出力するプログラムを示す。
      ただし,数値文字列が表す値はさほど大きくないものとして考える。

      #include

      #include

      main()

      {

      char a[10],b[10];

      int op1 , op2;

      printf("数字文字列aを入力して下さい→");

      gets(a);

      printf("数字文字列bを入力して下さい→");

      gets(b);

      op1=atoi(a);

      op2=atoi(b);

      printf("%s+%s=%d\n",a,b,op1+op2);

      }

      
      実行例1
       数字文字列aを入力して下さい→123
       数字文字列bを入力して下さい→321
        123+321=444

      実行例2
       数字文字列aを入力して下さい→12a
       数字文字列bを入力して下さい→10d
        12a+10d=22


       実行例2の場合は注意してください。
        この出力結果からわかるように,関数atoiは
        文字列の先頭から10進数を意味する文字までの変換が対象になります
         (先頭の空白は許される)
        英字などが,含まれていてもエラーにはならないです。

      以上,文字列を扱うchar型配列を中心に説明しましたが,
      配列にはint型やdouble型をはじめ他にも様々なデータ型の配列があります。
      しかし,どのような型の配列であっても,
      「あるデータ型の変数を連続して確保したもの」
      という配列の性質に変わりはないです。
      なので,配列の操作も基本的には変わらないです。

    長くなりましたねw
     次回の説明?は,近いうちにやりたいと思います。
     これが,いろんな人の役に立つかわかんないですけど
     ちょくちょくやっていきます。
     
     それでは
スポンサーサイト
[ 2009/06/02 14:11 ] 勉強 | TB(0) | CM(0)


コメントの投稿














管理者にだけ表示を許可する

トラックバック

この記事のトラックバックURL
http://akanec.blog60.fc2.com/tb.php/104-d1366f8a








上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。