当日のOHP資料です。
9.文字列の基本( Text p.207 - 223 )
-->
Download : sample-001.c ( SJIS 版 )
/* * C 言語の様々なリテラル */ #include <stdio.h> /* * main */ int main ( void ) { printf ( "「123」:整数型の %d \n", 123 ); printf ( "「123.0」: 浮動小数点型の %f \n", 123.0 ); printf ( "「0.01」: 浮動小数点型の %f \n", 0.01 ); printf ( "「1e-2」: 浮動小数点型の %f \n", 1e-2 ); printf ( "「1」: 整数型の %d \n", 1 ); printf ( "「'1'」: 文字型の %c \n", '1' ); printf ( "「\"1\"」: 文字型の %s \n", "1" ); return 0; }
C:\usr\c\> sample-001 「123」:整数型の 123 「123.0」: 浮動小数点型の 123.000000 「0.01」: 浮動小数点型の 0.010000 「1e-2」: 浮動小数点型の 0.010000 「1」: 整数型の 1 「'1'」: 文字型の 1 「"1"」: 文字型の 1 C:\usr\c\>
Download : sample-002.c ( SJIS 版 )
/* * C 言語の様々な文字リテラル */ #include <stdio.h> /* * main */ int main ( void ) { printf ( "例 1.「ABC」: %s\n", "ABC" ); printf ( "例 2.「A\\nC」: %s\n", "A\nC" ); printf ( "例 3.「A\\\"C」: %s\n", "A\"C" ); printf ( "例 4.「A\\\\C」: %s\n", "A\\C" ); printf ( "例 5.「A\\0C」: %s\n", "A\0C" ); return 0; }
C:\usr\c\> sample-002 例 1.「ABC」: ABC 例 2.「A\nC」: A C 例 3.「A\"C」: A"C 例 4.「A\\C」: A\C 例 5.「A\0C」: A C:\usr\c\>
Download : sample-003.c ( SJIS 版 )
/* * C 言語の様々な文字リテラルの中身 */ #include <stdio.h> #include <string.h> /* * main */ int main ( void ) { printf ( "例「\"ABC\"」: \"%s\"の大きさ(sizeof(\"ABC\")) = %d\n\n", "ABC", sizeof ( "ABC" ) ); printf ( "番目\tコード\t文字\n" ); printf ( "%d\t%d\t「%c」\n", 0, "ABC"[0], "ABC"[0] ); printf ( "%d\t%d\t「%c」\n", 1, "ABC"[1], "ABC"[1] ); printf ( "%d\t%d\t「%c」\n", 2, "ABC"[2], "ABC"[2] ); printf ( "%d\t%d\t「%c」\n", 3, "ABC"[3], "ABC"[3] ); printf ( "文字列(\"ABC\") の長さ (strlen (\"ABC\") ) = %d\n", strlen ( "ABC" ) ); return 0; }
C:\usr\c\> sample-003 例「"ABC"」: "ABC"の大きさ(sizeof("ABC")) = 4 番目 コード 文字 0 65 「A」 1 66 「B」 2 67 「C」 3 0 「 」 文字列("ABC") の長さ (strlen ("ABC") ) = 3 C:\usr\c\>
Download : sample-004.c ( SJIS 版 )
/* * C 言語の様々な文字リテラルの中身 */ #include <stdio.h> #include <string.h> /* * main */ int main ( void ) { printf ( "例「\"A\\0C\"」: \"%s\"の大きさ(sizeof(\"A\\0C\")) = %d\n\n", "A\0C", sizeof ( "A\0C" ) ); printf ( "番目\tコード\t文字\n" ); printf ( "%d\t%d\t「%c」\n", 0, "A\0C"[0], "A\0C"[0] ); printf ( "%d\t%d\t「%c」\n", 1, "A\0C"[1], "A\0C"[1] ); printf ( "%d\t%d\t「%c」\n", 2, "A\0C"[2], "A\0C"[2] ); printf ( "%d\t%d\t「%c」\n", 3, "A\0C"[3], "A\0C"[3] ); printf ( "文字列(\"A\\0C\") の長さ (strlen (\"A\\0C\") ) = %d\n", strlen ( "A\0C" ) ); return 0; }
C:\usr\c\> sample-004 例「"A\0C"」: "A"の大きさ(sizeof("A\0C")) = 4 番目 コード 文字 0 65 「A」 1 0 「 」 2 67 「C」 3 0 「 」 文字列("A\0C") の長さ (strlen ("A\0C") ) = 1 C:\usr\c\>
Download : sample-005.c ( SJIS 版 )
/* * 文字配列と文字列 (List 9-2 : p.210) */ #include <stdio.h> #include <string.h> /* * defines */ #define EOS '\0' /* * main */ int main ( void ) { char str[100]; /* 文字列を納める配列 : 文字列の長さより、少くても 1 大きいサイズにする */ str[0] = 'A'; /* 1 文字目に 'A' */ str[1] = 'B'; /* 2 文字目に 'B' */ str[2] = 'C'; /* 3 文字目に 'C' */ str[3] = EOS; /* 4 文字目に EOS ('\0' : NUL 文字) / 文字列の最後に必要 */ printf ( "文字配列 str が表現している文字列は「%s」です。\n", str ); printf ( "文字配列のサイズは %d ですが、文字列の長さは %d になります。\n", sizeof(str), strlen(str) ); return 0; }
C:\usr\c\> sample-005 文字配列 str が表現している文字列は「ABC」です。 文字配列のサイズは 100 ですが、文字列の長さは 3 になります。 C:\usr\c\>
Download : sample-006.c ( SJIS 版 )
/* * 文字配列の初期化と文字列 (List 9-3 : p.211) */ #include <stdio.h> #include <string.h> /* * main */ int main ( void ) { char str[100] = "ABC"; /* 文字列を納める配列 : 文字列の長さより、少くても 1 大きいサイズにする */ printf ( "文字配列 str が表現している文字列は「%s」です。\n", str ); printf ( "文字配列のサイズは %d ですが、文字列の長さは %d になります。\n", sizeof(str), strlen(str) ); return 0; }
C:\usr\c\> sample-006 文字配列 str が表現している文字列は「ABC」です。 文字配列のサイズは 100 ですが、文字列の長さは 3 になります。 C:\usr\c\>
Download : sample-007.c ( SJIS 版 )
/* * 文字配列の初期化と文字列 (List 9-3 : p.211) */ #include <stdio.h> #include <string.h> /* * main */ int main ( void ) { char str[100] = { 'A', 'B', 'C', '\0' }; /* 最初の 4 つを初期化 */ printf ( "文字配列 str が表現している文字列は「%s」です。\n", str ); printf ( "文字配列のサイズは %d ですが、文字列の長さは %d になります。\n", sizeof(str), strlen(str) ); return 0; }
C:\usr\c\> sample-007 文字配列 str が表現している文字列は「ABC」です。 文字配列のサイズは 100 ですが、文字列の長さは 3 になります。 C:\usr\c\>
Download : sample-008.c ( SJIS 版 )
/* * 文字配列の初期化と文字列 (List 9-3 : p.211) */ #include <stdio.h> #include <string.h> /* * main */ int main ( void ) { char str[] = "ABC"; /* 文字配列のサイズを省略すると、自動的に文字列の長さ + 1 のサイズになる */ printf ( "文字配列 str が表現している文字列は「%s」です。\n", str ); printf ( "文字配列のサイズは %d ですが、文字列の長さは %d になります。\n", sizeof(str), strlen(str) ); return 0; }
C:\usr\c\> sample-008 文字配列 str が表現している文字列は「ABC」です。 文字配列のサイズは 4 ですが、文字列の長さは 3 になります。 C:\usr\c\>
Download : sample-009.c ( SJIS 版 )
/* * 文字配列の初期化と文字列 (演習 9-1 : p.211) */ #include <stdio.h> #include <string.h> /* * main */ int main ( void ) { char str[] = "ABC\0XYZ"; int i; printf ( "文字配列 str が表現している文字列は「%s」です。\n", str ); printf ( "文字配列のサイズは %d ですが、文字列の長さは %d になります。\n", sizeof(str), strlen(str) ); printf ( "番目\tコード\t文字\n" ); for ( i = 0; i < sizeof( str ); i++ ) { printf ( "%d\t%d\t「%c」\n", i, str[i], str[i] ); } return 0; }
C:\usr\c\> sample-009 文字配列 str が表現している文字列は「ABC」です。 文字配列のサイズは 8 ですが、文字列の長さは 3 になります。 番目 コード 文字 0 65 「A」 1 66 「B」 2 67 「C」 3 0 「 」 4 88 「X」 5 89 「Y」 6 90 「Z」 7 0 「 」 C:\usr\c\>
Download : sample-010.c ( SJIS 版 )
/* * 空文字列 */ #include <stdio.h> #include <string.h> /* * main */ int main ( void ) { char str[] = ""; /* 空文字列 */ int i; printf ( "文字配列 str が表現している文字列は「%s」です。\n", str ); printf ( "文字配列のサイズは %d ですが、文字列の長さは %d になります。\n", sizeof(str), strlen(str) ); printf ( "番目\tコード\t文字\n" ); for ( i = 0; i < sizeof( str ); i++ ) { printf ( "%d\t%d\t「%c」\n", i, str[i], str[i] ); } return 0; }
C:\usr\c\> sample-010 文字配列 str が表現している文字列は「」です。 文字配列のサイズは 1 ですが、文字列の長さは 0 になります。 番目 コード 文字 0 0 「 」 C:\usr\c\>
Download : sample-011.c ( SJIS 版 )
/* * NUL 文字の役割 */ #include <stdio.h> /* * defines */ #define EOS '\0' /* * main */ int main ( void ) { char str[] = "ABCDEFG"; int i; printf ( "文字配列 str が表現している文字列は「%s」です。\n", str ); str[3] = EOS; /* 1 の場所の要素に EOS('\0') にすると、文字列としては "ABC" になる */ printf ( "文字配列 str が表現している文字列は「%s」です。\n", str ); str[3] = 'd'; /* 1 の場所の要素に 'd' にすると、文字列としては "ABCdEFG" になる */ printf ( "文字配列 str が表現している文字列は「%s」です。\n", str ); str[0] = EOS; /* 0 の場所の要素に EOS('\0') にすると、文字列としては "" (空文字)になる */ printf ( "文字配列 str が表現している文字列は「%s」です。\n", str ); return 0; }
C:\usr\c\> sample-011 文字配列 str が表現している文字列は「ABCDEFG」です。 文字配列 str が表現している文字列は「ABC」です。 文字配列 str が表現している文字列は「ABCdEFG」です。 文字配列 str が表現している文字列は「」です。 C:\usr\c\>
Download : sample-012.c ( SJIS 版 )
/* * 文字列の入力 ( List 9-4 : p.212 ) */ #include <stdio.h> /* * main */ #define STR_SIZE 1024 int main ( void ) { char str[STR_SIZE]; printf ( "御名前は : " ); scanf ( "%s", str ); /* & が不要である事に注意*/ printf ( "こんにちは %s さん\n", str ); return 0; }
栗野俊一
C:\usr\c\> sample-012 御名前は : 栗野俊一 こんにちは 栗野俊一 さん C:\usr\c\>
Download : sample-013.c ( SJIS 版 )
/* * 文字列の出力 ( List 9-5 : p.213 ) */ #include <stdio.h> /* * main */ int main ( void ) { char str[] = "12345"; printf ( "%s\n", str ); /* そのまま */ printf ( "%3s\n", str ); /* 最低 3 文字 */ printf ( "%.3s\n", str ); /* 3 文字まで */ printf ( "%8s\n", str ); /* 最低 8 文字、足りない部分は空白を前に詰る(右寄せ) */ printf ( "%-8s\n", str ); /* 最低 8 文字、足りない部分は空白を後に詰る(左寄せ) */ return 0; }
C:\usr\c\> sample-013 12345 12345 123 12345 12345 C:\usr\c\>
Download : sample-014.c ( SJIS 版 )
/* * 文字列の配列 (List 9-6 : p.214) */ #include <stdio.h> /* * main */ #define EOS '\0' #define MIN_SIZE 6 int main ( void ) { char str_ary[][MIN_SIZE] = { "Turbo", "NA", "DOHC", "" }; int i; for ( i = 0; str_ary[i][0] != EOS; i++ ) { printf ( "str_ary[%d]=\"%s\"\n", i, str_ary[i] ); } return 0; }
C:\usr\c\> sample-014 str_ary[0]="Turbo" str_ary[1]="NA" str_ary[2]="DOHC" C:\usr\c\>
Download : sample-015.c ( SJIS 版 )
/* * 文字列の配列への読み込み (List 9-7 : p.215) */ #include <stdio.h> /* * main */ #define MIN_SIZE 1024 #define ARY_SIZE 3 int main ( void ) { char str_ary[ARY_SIZE][MIN_SIZE]; int i; for ( i = 0; i < ARY_SIZE; i++ ) { printf ( "str_ary[%d]:", i ); scanf ( "%s", str_ary[i] ); } for ( i = 0; i < ARY_SIZE; i++ ) { printf ( "str_ary[%d]=\"%s\"\n", i, str_ary[i] ); } return 0; }
S500L A8 SLK
C:\usr\c\> sample-015 str_ary[0]:S500L str_ary[1]:A8 str_ary[2]:SLK str_ary[0]="S500L" str_ary[1]="A8" str_ary[2]="SLK" C:\usr\c\>
Download : sample-016.c ( SJIS 版 )
/* * 文字列の配列への読み込み (scanf/gets は危険) */ #include <stdio.h> /* * main */ #define MIN_SIZE 10 /* 態と小くした */ #define ARY_SIZE 3 int main ( void ) { char str_ary[ARY_SIZE][MIN_SIZE]; int i; for ( i = 0; i < ARY_SIZE; i++ ) { printf ( "str_ary[%d]:", i ); scanf ( "%s", str_ary[i] ); } for ( i = 0; i < ARY_SIZE; i++ ) { printf ( "str_ary[%d]=\"%s\"\n", i, str_ary[i] ); } return 0; }
abcdef uvwxyz123456789 ghijke
C:\usr\c\> sample-016 str_ary[0]:abcdef str_ary[1]:uvwxyz123456789 str_ary[2]:ghijke str_ary[0]="abcdef" str_ary[1]="uvwxyz1234ghijke" str_ary[2]="ghijke" C:\usr\c\>
Download : sample-017.c ( SJIS 版 )
/* * 文字列の配列への読み込み (scanf/gets は危険) */ #include <stdio.h> /* * main */ #define MIN_SIZE 10 /* わざと小くした */ #define ARY_SIZE 3 int main ( void ) { char str_ary[ARY_SIZE][MIN_SIZE]; int i; for ( i = 0; i < ARY_SIZE; i++ ) { printf ( "str_ary[%d]:", i ); scanf ( "%9s", str_ary[i] ); } for ( i = 0; i < ARY_SIZE; i++ ) { printf ( "str_ary[%d]=\"%s\"\n", i, str_ary[i] ); } return 0; }
abcdef uvwxyz123456789 ghijke
C:\usr\c\> sample-017 str_ary[0]: abcdef str_ary[1]:uvwxyz123 str_ary[2]: 456789 str_ary[0]="abcdef" str_ary[1]="uvwxyz123" str_ary[2]="456789" C:\usr\c\>
Download : sample-018.c ( SJIS 版 )
/* * 文字列の長さ (List 9-8 : p.216) */ #include <stdio.h> /* * defines */ #define EOS '\0' /* * unsigned int str_length ( const char str[] ) * 文字列 (を表している..) str の長さを求める */ unsigned int str_length ( const char str[] ) { unsigned int length = 0; while ( str[length] != EOS ) { length++; } return length; } /* * main */ #define MIN_SIZE 1024 int main ( void ) { char str[MIN_SIZE]; int i; printf ( "文字列を入力してください : " ); scanf ( "%s", str ); /* & が不要である事に注意 */ printf ( "文字列「%s」の長さは %u です。\n", str, str_length ( str ) ); return 0; }
SEC
C:\usr\c\> sample-018 文字列を入力してください : SEC 文字列「SEC」の長さは 3 です。 C:\usr\c\>