文字列の加工


strcpy 関数は文字列をコピーします。

char *strcpy(
             char *strDestination,
             const char *strSource
             );

strDestination に strSource をコピーします。コピーした結果、strDestination から文字列があふれてしまった場合の動作は未定です。戻り値は、コピー先の文字列(のアドレス)となります。この関数は、文字列の書き換えにも役に立ちます。なお、constというのは、その変数の内容を書き換えない、という意味の予約語です。

ソースコード

源文件
  1|/* str01.c */
  2|
  3|#include <stdio.h>
  4|#include <string.h>
  5|
  6|int main(void)
  7|{
  8|  char str[] = "ABC";
  9|
 10|  printf("%s\n", str);
 11|  strcpy(str, "def");
 12|  printf("%s\n", str);
 13|
 14|  return 0;                                                                           
 15|}

実行結果

ABC
def

これだと、長い文字列の書き換えも楽ですね。ただし、str の配列は十分に用意しておく必要があります。


strcat関数

char *strcat(
             char *strDestination,
             const char *strSource
             );

strDestinationの後ろに、strSourceを連結します。戻り値は連結後の strDestination です。

ソースコード

源文件
  1|/* str02.c */
  2|
  3|#include <stdio.h>
  4|#include <string.h>
  5|
  6|int main(void)
  7|{
  8|  char name[64], same[] = "様";                                                       
  9|
 10|    printf("お名前を入力してください。---");
 11|  fgets(name, 64, stdin);
 12|  printf("%sお待ちしておりました\n",
 13|         strcat(name, same));
 14|
 15|  return 0;
 16|}

実行結果

お名前を入力してください。---mou
mou
様お待ちしておりました


int sprintf(
            char *buffer,
            const char *format [,
                                argument] ...
            ); 

buffer は出力の格納先です。format は書式指定文字列です(printf関数と同じ)。

ソースコード

源文件
  1|/* sprintf01.c */
  2|
  3|#include <stdio.h>
  4|#include <string.h>
  5|
  6|int main(void)
  7|{
  8|  char buffer[128], name[32];
  9|  int age;
 10|  double bl, bw;
 11|
 12|  while(1){
 13|    printf("Name---");
 14|    fgets(name, 128, stdin);
 15|    if(!strcmp(name, "\n")) {
 16|      printf("No Name\n");
 17|      continue;
 18|    }                                                                                 
 19|    Break;
 20|  }
 21|
 22|while(1){
 23|  printf("Age----");
 24|  scanf("%d", &age);
 25|  if(age < 0 || age > 150){                                                           
 26|    printf("Are you sure?\n");
 27|    continue;
 28|  }
 29|  break;
 30| }
 31|
 32| while(1){
 33|   printf("Height---");
 34|   scanf("%lf", &bl);
 35|   if(bl < 0.0 || bl > 250.0){
 36|     printf("Oh My GOD\n");
 37|     continue;
 38|   }
 39|   break;
 40| }
 41|
 42| while(1){
 43|   printf("Weight---");
 44|   scanf("%lf", &bw);
 45|   if(bw < 0.0 || bw > 200.0){                                                        
 46|     printf("I can't believe\n");
 47|     continue;
 48|   }
 49|   break;
 50| }
 51|
 52| sprintf(buffer,
 53|         "\n %s さん(Age: %d)のプロフィール\n"
 54|         "Height: %5.1fcm, Weight: %5.1fkg, BMI: %4.1f\n",
 55|         name, age, bl, bw, bw * 10000.0 / (bl * bl));
 56| printf("%s", buffer);
 57|
 58| return 0;
 59|}

実行結果

Name---mou
Age----26
Height---176
Weight---55

 mou
 さん(Age: 26)のプロフィール
Height: 176.0cm, Weight:  55.0kg, BMI: 17.8


Chapte7 @ C言語目録 @ HomeWork List @ 昭亮's Homepage