当日の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\>