Comments
Description
Transcript
『文字列とポインタ』錬成問題
294 錬成問題 ▪文字の並びを表現するのが文字列である。文字列の終端は、文字コードが る 文字である。文字列リテラルには、 (2) には 記憶域期間が与えられ、その末尾 (3) 文字を含めて最大 1 文字を配列 s に読み込むには、cin. ▪以下 示 cout << << << << ▪以下 実行結果 sizeof("") sizeof("\") sizeof("ABC") sizeof("ABC\12") 示 、 。 示 、 ▪以下 (14) (5) 文字列 "FBI" (9) , 占有 (10) 、三 、配列 s 要素型 要素数 (20) 示 ▪右 示 true 関数 初期化 宣言 。 }; 先頭文字 "FBI" 文字列 (13) 文字列 "ABC", "X", "123" 表 指 初期化 記憶域 占有 、文字列 s 、文字列 s 、 (17) 宣言 。 (18) 。 、配列 p 要素型 。 空 関数 "ABC" false 。 要素数 配列 // 各列は4文字分の配列 // 各要素は文字列を指す char s[3][ (15) ] = {"ABC", "X", "123"}; char (16) p[] = {"ABC", "X", "123"}; ▪右 表 = "FBI"; 示 (19) とする。 ' ' ' ' ' ' '\n'; 文字列 p 。 char , (4) 。 記憶域 (6) (8) char s[4] = { (7) , char s[4] = {" (11) "}; char s[4] = " (12) "; 宣言 << << << << 示 char 型配列 s 、 ▪以下 であ 文字が付加される。 (2) (2) (1) 返却 。 void null(char s { *s = (22) ; } (21) ) bool isABC(const char (23) s) { if ( (24) ++ != 'A') return if ( (24) ++ != 'B') return if ( (24) ++ != 'C') return if ( (25) != (26) ) return return true; } false; false; false; false; 。 295 ▪以下 示 実行結果 示 。 char str[] = "ABC\nDEF\GHI\n"; cout << str; ▪以下 示 関数 。 、文字列 s 中 (27) 小文字 大文字 、 、< (28) 、大文字 小文字 等 同 、二 文字列 s1 ( 文字 )true 返却 関数 示 、文字列 s 。 ▪以下 含 全数字文字 int digit_no(const char s (39) ) { int count = (40) ; while ( (41) ) { if ( (41) >= (42) && count++; (44) ++; } return count; } ▪以下 char* a char* t cout << cout << 示 = "FBI", * b = = a; a = b; "a = " << a << "b = " << b << 実行結果 (41) 示 (47) char a[] = "ABC"; char* p = "ABC"; a = "XYZ"; p = "XYZ"; 8 (43) 返却 関数 ) 。 a = b = ○ (46) <= 個数 "CIA"; b = t; '\n'; '\n'; ▪ )) ))); bool str_eq(const char* s1, const char* s2) { while (*s1 (35) *s2) { if (*s1 == (36) ) return (37) ; s1++; s2++; } return (38) ; } 、 false (30) (30) 。 、 × 埋 。 (45) 。 文字列とポインタ s2 示 表示 必要 > void put_altstr(const char (29) s) { while ( (30) ) { cout << ( (31) ( (30) ) ? (32) <char>(toupper( : (33) <char>(tolower( (34) ++; } } ▪右 変換 296 ▪以下 示 三 、文字列 s str_len 文字 int str_len(const char* s) { int len = ; while (s[ (48) ]) len++; return (49) ; } ▪文字列 長 返却 strcpy 関数 提供 < 以下 示 求 文字列 x 末尾 、文字列 s2 文字列 y len = strlen( strcpy( (58) , strcpy( (60) , strcat( (64) , ▪右 示 反転 文字列 連結 文字 (63) 並 関数 s1 、s1 "ABC" 反転 、文字列 s 関数 文字 並 。文字列 s1 "ABC" 、 cout << str_rvs(s1); 実行 ▪右 読 、 示 、文字列 s 末尾 true 返却 表示 (70) 関数 読 、 。 回文(先頭 同 文字列) false 。 文字列 b a 両方 。 ) 。 示 関数 。 int str_len(const char* s) { const char* p = (52) ; while (* (53) ) p++; return p - (54) ; } 、文字列 c s1 ); ); (61) ( (62) , (65) ); "CBA" 求 長 (59) 、文字列 s2 文字列 。 > (57) (文字列 s2 ▪右 文字列 (56) 、文字列 s 変数 len 。 (55) strlen 関数 長 int str_len(const char* s) { int len = ; while (* (50) ++) len++; return (51) ; } 標準 strlen 関数 返却値型 含 )); // // // // 文字列sの長さを求めてlenに代入 文字列s2をs1にコピー 文字列cをbとaにコピー 文字列xの末尾にyを連結 void str_rvcopy(char s1[], char s2[]) { int len = strlen( (66) ); for (int i = ; i < (67) ; i++) s1[ (68) ] = s2[ (69) ]; s1[len] = ; } char* str_rvs(char s[]) { int len = strlen( (71) ); for (int i = ; i < (72) ; i++) { char temp = s[i]; s[i] = (73) ; (74) = (75) ; } return s; } bool is_palindrome(const char s[]) { int len = ; while (s[len]) len++; for (int i = ; i < (76) ; i++) if (s[i] != (77) ) return (78) ; return (79) ; } 、 297 ▪右 示 示 関数 、文字列 s 、s 「"ABC"」 ▪右 受 取 表示 示 列表現 二重引用符 " 文字列 変換 文字 格納 s 。 "ABC" 、返却 s do { s 1573 、x -328 格納 "-328" s[ (83) ] = '' + nx % nx /= (85) ; } while (nx > ); if (x < ) s[len++] = (86) ; s[len] = (87) ; s 。 } ▪右 示 、文字列 s2 文字 取 除 関数 、文字列 s1 。 、 文 字 列 s1 文字列 s2 列 s1 先頭 返 "ABCKCAE" 、文字 "ACE" "ACCAE" ▪以下 含 更新 。 示 、文字列 s2 位置 文字 、発見 探 場合 8 void strinstr(char s1[], const char s2[]) { int i, j, idx = (91) ; for (i = ; (92) ; i++) { for (j = ; (93) ; j++) if (s1[i] == s2[j]) { s1[ (94) ] = s1[i]; break; } } s1[ (95) ] = '\'; } 文字 。文字 空 ; for (int i = (88) ; i >= ; i--) { char temp = s[i]; s[i] = (89) ; (90) = temp; } return s; 含 関数 (84) 文字列とポインタ 、x 格納 void put_str(char *s) { cout << " (80) "; while (* (81) ) { 、 cout << * (81) ; (82) ++; } cout << " (80) "; } char *itoa(int x, char* s) { int len = ; unsigned nx = x >= ? x : -x; 。 "1573" 表 。 、int 型整数値 x 関数 囲 。 発見 、文字列 s1 返却 場合 。 const char *str_pbrk(const char* s1, const char* s2) { for ( ; (96) ; s1++) { const char* t = s2; for ( ; (97) ; t++) if (*t == *s1) return s1; } return (98) ; } 、 文字 含 最