当日のOHP資料です。
Download : sample-001.c ( SJIS 版 )
#include <stdio.h> int main ( void ) { int index; char *pstr; printf ( "\"abc\" + 1 == \"%s\"\n", "abc" + 1 ); for ( index = 0; index < 4; index++ ) { printf ( "\"abc\"[%d]==%x ('%c')\n", index, "abc"[index], "abc"[index] ); } printf ( "sizeof ( \"abc\" ) == %d\n", sizeof ( "abc" ) ); printf ( "\n---\n" ); /**/ pstr = "abcxyz"; printf ( "pstr == %s\n", pstr ); printf ( "sizeof ( pstr ) == %d\n", sizeof ( pstr ) ); printf ( "\n---\n" ); /**/ // pstr[1] = 'B'; // エラーになった... // printf ( "pstr == %s\n", pstr ); return 0; }
C:\usr\c\> sample-001 "abc" + 1 == "bc" "abc"[0]==61 ('a') "abc"[1]==62 ('b') "abc"[2]==63 ('c') "abc"[3]==0 (' ') sizeof ( "abc" ) == 4 --- pstr == abcxyz sizeof ( pstr ) == 4 --- C:\usr\c\>
Download : sample-002.c ( SJIS 版 )
#include <stdio.h> #define ARRAY_SIZE 1024 #define EOS '\0' int main ( void ) { char carray [ ARRAY_SIZE ]; printf ( "sizeof ( char ) == %d\n", sizeof ( char ) ); printf ( "ARRAY_SIZE == %d\n", ARRAY_SIZE ); printf ( "sizeof ( carray ) == %d\n", sizeof ( carray ) ); printf ( "\n---\n" ); /**/ carray[0] = 'a'; carray[1] = 'b'; carray[2] = 'c'; carray[3] = EOS; printf ( "carray==\"%s\"\n", carray ); printf ( "sizeof ( carray ) == %d\n", sizeof ( carray ) ); printf ( "\n---\n" ); /**/ carray[1] = EOS; printf ( "carray==\"%s\"\n", carray ); printf ( "sizeof ( carray ) == %d\n", sizeof ( carray ) ); printf ( "carray[2] == '%c'\n", carray[2] ); carray[1] = 'B'; printf ( "carray==\"%s\"\n", carray ); printf ( "\n---\n" ); /**/ printf ( "\"ab\\0cd\" == \"%s\"\n", "ab\0cd" ); printf ( "sizeof ( \"ab\\0cd\" ) == %d\n", sizeof ( "ab\0cd" ) ); printf ( "\"ab\\0cd\"[3] == '%c'\n", "ab\0cd"[3] ); /**/ return 0; }
C:\usr\c\> sample-002 sizeof ( char ) == 1 ARRAY_SIZE == 1024 sizeof ( carray ) == 1024 --- carray=="abc" sizeof ( carray ) == 1024 --- carray=="a" sizeof ( carray ) == 1024 carray[2] == 'c' carray=="aBc" --- "ab\0cd" == "ab" sizeof ( "ab\0cd" ) == 6 "ab\0cd"[3] == 'c' C:\usr\c\>
Download : sample-003.c ( SJIS 版 )
#include <stdio.h> #include <string.h> #define ARRAY_SIZE 1024 #define EOS '\0' int main ( void ) { char carray [ ARRAY_SIZE ]; /**/ strcpy ( carray, "abcxyz" ); printf ( "carray==\"%s\"\n", carray ); printf ( "strlen ( carray ) ==%d\n", strlen ( carray ) ); /**/ strcpy ( carray, carray + 1 ); printf ( "carray==\"%s\"\n", carray ); /**/ // strcpy ( carray + 1, carray ); // printf ( "carray==\"%s\"\n", carray ); /**/ strcpy ( carray, "abcxyz" ); memmove ( carray + 1, carray, strlen ( carray ) + 1 ); printf ( "carray==\"%s\"\n", carray ); return 0; }
C:\usr\c\> sample-003 carray=="abcxyz" strlen ( carray ) ==6 carray=="bcxyz" carray=="aabcxyz" C:\usr\c\>
Download : sample-004.c ( SJIS 版 )
#include <stdio.h> #include <string.h> #define ARRAY_SIZE 1024 #define EOS '\0' int main ( void ) { char carray [ ARRAY_SIZE ]; char *find; /**/ strcpy ( carray, "123abc456abc789" ); find = strstr ( carray, "abc" ); if ( find != NULL ) { printf ( "%s の中に%sがあり、%s の所です\n", carray, "abc", find ); } else { printf ( "%s の中に%sがありません\n", carray, "abc" ); } find = strstr ( carray, "xyz" ); if ( find != NULL ) { printf ( "%s の中に%sがあり、%s の所です\n", carray, "xyz", find ); } else { printf ( "%s の中に%sがありません\n", carray, "xyz" ); } return 0; }
C:\usr\c\> sample-004 123abc456abc789 の中にabcがあり、abc456abc789 の所です 123abc456abc789 の中にxyzがありません C:\usr\c\>
「文字列の置換」のプログラムを作る
/* * */ #include <stdio.h> #include <string.h> /* * */ char *replace_one ( char *line, char *src, char *dst ) { /* ** この部分を完成させなさい */ } /* * */ #define BUFSIZE 1024 int main ( void ) { char src [ BUFSIZE ]; char dst [ BUFSIZE ]; char line [ BUFSIZE ]; char *ans; printf ( "何を ?\n" ); scanf ( "%s", src ); printf ( "何に ?\n" ); scanf ( "%s", dst ); printf ( "行は ?\n" ); scanf ( "%s", line ); ans = replace_one ( line, src, dst ); printf ( "変更結果は「%s」です。\n", line ); if ( ans == NULL ) { printf ( "置き換える文字列はありませんでした\n" ); } else { printf ( "置き換えた部分の後の文字列は「%s」です。\n", ans ); } return 0; }
abc xyz 111abc222abc333
C:\usr\c\> 20091204-1 何を ? 何に ? 行は ? 変更結果は「111xyz222abc333」です。 置き換えた部分の後の文字列は「222abc333」です。 C:\usr\c\>
/* * */ #include <stdio.h> #include <string.h> /* * */ char *replace_one ( char *line, char *src, char *dst ) { /* * さっきと同じ */ } /* * */ char *replace_all ( char *line, char *src, char *dst ) { /* * この部分を完成させなさい。 */ } /* * */ #define BUFSIZE 1024 int main ( void ) { char src [ BUFSIZE ]; char dst [ BUFSIZE ]; char line [ BUFSIZE ]; char *ans; printf ( "何を ?\n" ); scanf ( "%s", src ); printf ( "何に ?\n" ); scanf ( "%s", dst ); printf ( "行は ?\n" ); scanf ( "%s", line ); ans = replace_all ( line, src, dst ); printf ( "変更結果は「%s」です。\n", line ); return 0; }
abc xyz 111abc222abc333
C:\usr\c\> 20091204-2 何を ? 何に ? 行は ? 変更結果は「111xyz222xyz333」です。 C:\usr\c\>
次のプログラムを完成させ、「コマンドプロンプト」を開いて、以下の操作をやってみよう。
/* * */ #include <stdio.h> #include <string.h> /* * */ char *replace_one ( char *line, char *src, char *dst ) { /* * さっきと同じ */ } /* * */ char *replace_all ( char *line, char *src, char *dst ) { /* * さっきと同じ */ } /* * */ #define BUFSIZE 1024 int main ( int ac, char *av[] ) { char line [ BUFSIZE ]; while ( fgets ( buf, BUFSIZE, stdin ) != NULL ) { printf ( "%s", replace_all ( line, av[1], av[2] ) ); } return 0; }
C:\usr\c\> 20091204 abc xyz 111abc22abc333 111xyz22xyz333 ^Z C:\usr\c\>