...

『文字列とポインタ』錬成問題

by user

on
Category: Documents
4

views

Report

Comments

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) ;
}
、
文字
含
最
Fly UP