9.1 文字列操作

  1.文字列の操作
<サンプルプログラム>

/***
   アルファベットの順番を調べる
***/
#include <stdio.h>
#include <string.h>

int main(void){
 int point;
 char str[ ] = "abcdefghijklnmopqrstuvwxyz", /* 検索対象の文字列 */
  str1 = 'z',                                /* 検索する文字 */
  *pt;


 pt = strchr(str, str1);

 point = pt - str;

 printf("%s 中に %c が出現するのは %d 番目から\n",
 str, str1, point+1);       /* 最初にでてくる 'z' が前から何番目かを表示 */
}
<サンプルプログラム>

/***
  文字列の連結
***/
#include <stdio.h>
#include <string.h>

int main(void){
 char str1[20] = "abcdefg",   /* 連結する先の文字列(連結後のサイズを */
                                       /*確保しておくこと) */
  str2[ ] = "hijklmn";       /* 連結する文字列 */

 /*** 連結前の各文字列 ***/
 puts(str1);
 puts(str2);

 strcat(str1, str2);

 /*** 連結後の各文字列 ***/
 puts(str1);
 puts(str2);
}
<サンプルプログラム>

/***
  文字列の比較
***/
#include <stdio.h>
#include <string.h>

/*** プロトタイプ宣言 ***/
void cmp(char *str, char *str1);

int main(void){
 /*** 比較する文字列 ***/
 char str[ ] = "abcdefg",
  str1[ ] = "abcdeff",
  str2[ ] = "abcdefg",
  str3[ ] = "abcdefh";


  /*** str と str1 の比較 ***/
 cmp(str, str1);

 /*** str と str2 の比較 ***/
 cmp(str, str2);

  /*** str と str3 の比較 ***/
 cmp(str, str3);
}

void cmp(char *str, char *str1){
 if (strcmp(str, str1) == 0){             /* 文字列が等しいとき */
  printf("%s と %s は等しい\n", str, str1);
 } else {
  if (strcmp(str, str1) < 0){            /* 文字列が小さいとき */
    printf("%s < %s\n", str, str1);
  } else {                               /* 文字列が大きいとき */
   printf("%s < %s\n", str1, str);
  }
 }
}
<サンプルプログラム>

/***
  文字列のコピー
***/
#include <stdio.h>
#include <string.h>

int main(void){
 char str1[20] = "",             /* コピー先の配列(連結後のサイズを確保 */
                                       /* しておくこと) */
  str2[ ] = "abcdefghijklmn";    /* コピー元の文字列 */

 /*** コピー前の各文字列 ***/
 printf("コピー前の文字列\n");
 printf("str1: %s\n", str1);
 printf("str2: %s\n", str2);

 strcpy(str1, str2);


 /*** コピー後の各文字列 ***/
 printf("コピー後の文字列\n");
 printf("str1: %s\n", str1);
 printf("str2: %s\n", str2);
}
<サンプルプログラム>

/***
  文字列の長さ
***/
#include <stdio.h>
#include <string.h>

int main(void){
 int num;
 char str1[ ] = "C",
  str2[ ] = "Perl",
  str3[ ] = "Fortran",


  str4[ ] = "Pascal";

 /*** 文字列の長さ計算 ***/
 num = strlen(str1);
 printf("%s の文字数は %d\n", str1, num);

 num = strlen(str2);
 printf("%s の文字数は %d\n", str2, num);

 num = strlen(str3);
 printf("%s の文字数は %d\n", str3, num);

 num = strlen(str4);
 printf("%s の文字数は %d\n", str4, num);
}
<サンプルプログラム>

/***
  n 文字列の連結
***/
#include <stdio.h>
#include <string.h>

int main(void){
 int num = 4;
 char str1[20] = "abcdefg",  /* 連結する先の文字列(連結後のサイズを */
                                      /* 確保しておくこと) */
  str2[ ] = "hijklmn";       /* 連結する文字列 */

 /*** 連結前の各文字列 ***/
 puts(str1);
 puts(str2);

 strncat(str1, str2, num);   /* n 文字連結 */


 /*** 連結後の各文字列 ***/
 puts(str1);
 puts(str2);
}
<サンプルプログラム>

/***
/  n 文字の比較
/***/
#include <stdio.h>
#include <string.h>

int main(void){
  int num = 7;
 /*** 比較する文字列 ***/
 char str1[ ] = "abcdefg",
  str2[ ] = "abcdefh";

 /*** num 文字の比較 ***/
 printf("%s と %s を先頭から %d 文字比較\n", str1, str2, num);
 if (strncmp(str1, str2, num) == 0){             /* 文字列が等しいとき */
   printf("%s と %s は等しい\n", str1, str2);
 } else {
   if (strncmp(str1, str2, num) < 0){            /* 文字列が小さいとき */
    printf("%s < %s\n", str1, str2);
   } else {                               /* 文字列が大きいとき */
    printf("%s < %s\n", str2, str1);
   }
 }

 /*** num-1 文字の比較 ***/
 printf("%s と %s を先頭から %d 文字比較\n", str1, str2, num-1);
 if (strncmp(str1, str2, num-1) == 0){             /* 文字列が等しいとき */
  printf("%s と %s は等しい\n", str1, str2);
 } else {
  if (strncmp(str1, str2, num-1) < 0){            /* 文字列が小さいとき */
    printf("%s < %s\n", str1, str2);
  } else {                               /* 文字列が大きいとき */
    printf("%s < %s\n", str2, str1);
  }
 }
}
<サンプルプログラム>

/***
  n 文字のコピー
***/
#include <stdio.h>
#include <string.h>

int main(void){
 int num = 9;
 char str1[20] = "",             /* コピー先の配列(連結後のサイズを */
                                       /* 確保しておくこと) */
  str2[ ] = "abcdefghijklmn";    /* コピー元の文字列 */

 /*** コピー前の各文字列 ***/
 printf("コピー前の文字列\n");
 printf("str1: %s\n", str1);
 printf("str2: %s\n", str2);

 strncpy(str1, str2, num);       /* num 文字コピー */


  /*** コピー後の各文字列 ***/
 printf("コピー後の文字列\n");
 printf("str1: %s\n", str1);
 printf("str2: %s\n", str2);
}
<サンプルプログラム>

/***
  あるアルファベットの最期に出現する位置を調べる
***/
#include <stdio.h>
#include <string.h>

int main(void){
 int point;
 char str[ ] = "abcdefghiabcdefghi", /* 検索対象の文字列 */
   ch = 'a',                        /* 検索する文字 */
   *pt;

 pt = strrchr(str, ch);

 point = pt - str;

 printf("%d 番目\n", point+1);       /* 最期にでてくる a が前から */
                                              /* 何番目かを表示 */
}
<サンプルプログラム>

/***
  ある文字列が出現する位置を調べる
***/
#include <stdio.h>
#include <string.h>

int main(void){
  int point;
  char str[ ] = "abcdefghiabcdefghi", /* 検索対象の文字列 */
  str1[ ] = "i",                   /* 検索する文字列 */
   *pt;

 pt = strstr(str, str1);

 point = pt - str;

 printf("%s 中に %c が出現するのは %d 番目から\n",
 str, str1, point+1);       /* 最初にでてくる 'i' が前から何番目かを表示 */
}

 


2003年5月3日 13:00 更新