11.3 文字列関数

標準ライブラリ関数 : 文字列操作関数

string.hのヘッダファイルをincludeする

主なもの:

strcpy(ss,st):文字列(文字型の配列)ssに文字列stをコピーする
strlen(st):文字列stの長さを求める
strcat(ss,st):文字列ssの後ろに文字列stを連結する
strncpy(ss,st,n):文字列ssに文字列stの先頭n文字をコピーする
strncat(ss,st,n)文字列ssの後ろに文字列stの先頭n文字を連結する

サンプル:

#include <stdio.h>
#include <string.h>       //string.hのインクルードを忘れずに
 
int main(int argc, const char * argv[])
{
     
    // insert code here...
    char str[40];
    char alpha1[] = "ABCDE";
    char alpha2[] = "VWXYZ";
    int length;
     
    printf("alpha1 : %s\n", alpha1);
    printf("alpha2 : %s\n", alpha2);
     
    strcpy(str, alpha1);
    strcat(str, alpha2);
    printf("str : %s\n", str);
     
    length = (int)strlen(str);
    printf("str's length : %d\n", length);
         
    return 0;
}

実行結果:

alpha1 : ABCDE
alpha2 : VWXYZ
str : ABCDEVWXYZ
str’s length : 10

練習問題:
========
(1)文字列に自分の名前を代入して表示してみよう。
(2)(1)で自分の名前の長さの文字列の長さを表示してみよう。
実行例:
自分の名前を半角英数字で入力してください
[Daiichi Koudai]
私の名前はDaiichi Koudaiです
文字数は14です

ヒント:

  1. printf
  2. gets, scanf

標準ライブラリ関数 : 文字操作関数

ctype.hのヘッダファイルをinclude

主なもの:

isalnum(c):文字cが英数字(A-Z, a-z, 0-9)なら真を返す
isalpha(c):文字cが英文字(A-Z, a-z)なら真を返す
isdigit(c):文字cが数字(0-9)なら真を返す
islower(c):文字cが小文字(a-z)なら真を返す
isupper(c):文字cが大文字(A-Z)なら真を返す
tolower(c):文字cが大文字だった場合に小文字に変換して返す
toupper(c):文字cが小文字だった場合に大文字に変換して返す

サンプル:

#include <stdio.h>
#include <ctype.h>        //ctype.hのインクルードを忘れずに
 
int main(int argc, const char * argv[])
{
     
    // insert code here...
    char lo = 'a';
    char up = 'A';
     
    if(islower(lo)) {
        printf("%c を大文字変換 -> %c\n", lo, toupper(lo));
    }
     
    if(isupper(up)) {
        printf("%c を小文字変換 -> %c\n", up, tolower(up));
    }
     
    return 0;
}

実行結果:

a を大文字変換 -> A
A を小文字変換 -> a

練習問題:
(3)(1)で自分の名前を大文字で表示してみよう。
実行例:
自分の名前を半角英数字で入力してください
Daiichi Koudai
私の名前はDAIICHI KOUDAIです
文字数は14です

ヒント:

  1. http://chenlab.net/2016/04/18/c-exercises-2-stdio/

回答:

#include <stdio.h>
#include <ctype.h>        //ctype.hのインクルードを忘れずに
#include <string.h>       //string.hのインクルードを忘れずに
 
int main(int argc, const char * argv[])
{
     
    // insert code here...

  char name[128];
  int i;
  
  printf("自分の名前を半角英数字で入力してください");
  gets(name);
  
    for (i = 0; name[i] != '\0'; i++) 
    {
        name[i] = toupper(name[i]); 
    }
  
    printf("私の名前は%sです\n", name);
    printf("文字数は%dです\n", (int)strlen(name));
    
  getch();
    return 0;
}