キャッシュ

IT関連教材の cache です。旧 URL のまま随時変更しています。

文字列の操作

2014-04-20 21:51:40 | 教材


文字列の結合
文字列の移動
文字列の置換
ポインタの配列


文字列の結合

 

#include stdio.h>
int main( ){
    char s[80]="ABCDE", *p="XYZ";
    int k;
    for(k = 0; /*あ*/; k++){;}
    while(/*い*/){
        s[k] = *p; k++; p++;
    }
    s[k] = '\0';
    printf("%s\n", s); 
    fflush(stdin); getchar( );
    return 0;
}

文字列sの後に文字列pを付け加える左のプログラムを完成せよ。


 

☆ 文字列の末尾は「'\0'」で表示('\0' == 0)。
★ 「while(*p){s[k++]=*p++;}」でもよい。


文字列の移動

 

#include stdio.h>
int main( ){
    char s1[80]="ABCDE";
    char s2[ ]=/*か*/; int k, n;
    <* s2 の長さを n に設定 *>
    <* s1 の位置を n 文字だけ移動 *>
    <* s1 の先頭に s2 を埋め込む *>
    printf("s1 = %s\n", s1); 
    fflush(stdin); getchar( );
    return 0;
}

文字列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>
int main( ){
    char s1[80]=/*さ*/, s2[80];
    char *p1=s1, *p2=s2;
    while(*p1 != '\0'){/*し*/}
    *p2 = '\0';
    printf("%s\n", p2); 
    fflush(stdin); getchar( );
    return 0;
}

文字列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>
int main( ){
    char s[80]="Spring Summer "
               "Autumn Winter ";
    char *p[4], *q=s; int k=0;
    while(k < 4){
        p[k] = q; k++; q++;
        while(/*た*/){q++;}
        *q = '\0'; q++;
    }
    for(k = 0; k < 4; k++){
        printf("%s\n", p+k); 
    }
    fflush(stdin); getchar( );
    return 0;
}

文字列sの文字' ''\0'に変換して,分割された文字列のアドレスをポインタの配列に格納する左のプログラムを完成せよ。 
注: 「"Spring Summer " "Autumn Winter "」は
     「"Spring Summer Autumn Winter "」と同じ。

☆ 2次元配列char s2[4][8];の「s2[k]」に「p[k]」に対応する文字列置くには1文字ずつコピーが必要。
★ 「p[1] = "Summer";」を実行すると,適当な場所に文字列「"Summer"」を作成してその(先頭)アドレスを「p[1]」に設定する。


 



コメントを投稿