・ 文字列の結合
・ 文字列の移動
・ 文字列の置換
・ ポインタの配列
文字列の結合
#include <stdio.h> |
文字列「s」の後に文字列「p」を付け加える左のプログラムを完成せよ。 |
☆ 文字列の末尾は「'\0'」で表示('\0' == 0)。
★ 「while(*p){s[k++]=*p++;}」でもよい。
文字列の移動
#include <stdio.h> |
文字列「s2」の初期値/*か*/を「"XYZ"」とし,文字列「s1」の前に「s2」を挿入する左のプログラムを完成せよ。 |
☆ <* s2 の長さを n に設定 *> は 文字列の結合 の for文 と同様。
☆ <* s1 の先頭に s2 を埋め込む *> は 文字列の結合 の while文 と同様。
◎ <* s1 の位置を n 文字だけ移動 *> は,移動前と移動後の領域が重複する場合要注意。0<n<m のときの移動は
---------------------------
for(k = 0; k <= m; k++){s[k] = s[k+n];} /* s[n+m] == '\0' */
for(k = m; k >= 0; k--){s[k+m] = s[k];} /* s[m] == '\0' */
---------------------------
★ 標準ライブラリ関数の 「strcpy( )」は領域の重複を想定していない。
文字列の置換
#include <stdio.h> |
文字列「s1」の初期値を/*さ*/を「"543\n21\012345"」とし,「s1」に含まれるすべての「"\n"」を「"\r\n"」に変換して「s2」に格納するプログラムを完成して実行結果を示せ。 |
☆ 「if(*p1 == '\n'){*p2 = '\r'; p2++;} *p2 = *p1; p1++; p2++;」
☆ 実行結果は『543』『21』『345』(3行)。
★ 「"\012"」(8進数による表示)は「"\n"」と同じ。
★ 標準ライブラリ関数の 「strncmp(cs, ct, n)」は「ct」,「cs」からの「n」文字を比較する。
ポインタの配列
#include <stdio.h> |
文字列「s」の文字「' '」を「'\0'」に変換して,分割された文字列のアドレスをポインタの配列に格納する左のプログラムを完成せよ。 |
☆ 2次元配列「char s2[4][8];」の「s2[k]」に「p[k]」に対応する文字列置くには1文字ずつコピーが必要。
★ 「p[1] = "Summer";」を実行すると,適当な場所に文字列「"Summer"」を作成してその(先頭)アドレスを「p[1]」に設定する。
※コメント投稿者のブログIDはブログ作成者のみに通知されます