【C言語入門】文字列とは?文字列の使い方総まとめ

C言語には複数の文字をまとめて扱うための文字列があります。char型では1文字しか扱えないので、char型の配列にして複数の文字を扱えるようにしたものを文字列といいます。

この記事では、

  • 文字列とは
  • strcmp関数で文字列を比較する方法
  • strcpy関数で文字列をコピーする方法
  • atoi関数で文字列を数値に変換する方法
  • という基本的な内容から、

    • strcat関数で文字列を連結する方法
    • strtok関数で文字列を分割する方法
    • 正規表現を使って文字列を検索する方法

    などの応用的な使い方に関しても解説していきます。今回はこれらの方法を覚えるために、文字列のさまざまな使い方をわかりやすく解説します!

    目次

    文字列とは

    文字列とは、複数の文字を1つにまとめたものです。C言語には他の言語にあるような文字列型(String型)はないで、char型の配列にして文字列を扱います。文字列を使うには、次のようにchar型の配列で宣言をします。

    char 変数名[文字列のサイズ];

    文字列の詳しい使い方はこの記事で順に解説していくので、ぜひ最後まで確認してください!

    strcmp関数で文字列を比較する方法

    ここではstrcmp関数で文字列を比較する方法を解説します。strcmp関数は2つの文字列の文字コードの大小を比較して、次の結果を返します。

    • 第1引数 < 第2引数 の場合は負の値
    • 第1引数 > 第2引数 の場合は正の値
    • 第1引数 = 第2引数 の場合は0

    strcmp関数の使い方を次のプログラムで確認してみましょう。

    #include <stdio.h>
    #include <string.h>
    
    int main(void) {
    
        char str1[] = "123";
        char str2[] = "456";
    
        printf("第1引数 < 第2引数 : %d\n", strcmp(str1, str2));
        printf("第1引数 > 第2引数 : %d\n", strcmp(str2, str1));
        printf("第1引数 = 第2引数 : %d\n", strcmp(str1, str1));
    
        return 0;
    }

    [実行結果]

    第1引数 < 第2引数 : -1
    第1引数 > 第2引数 : 1
    第1引数 = 第2引数 : 0

    プログラムの実行結果から、strcmp関数で文字列の比較ができていることが確認できます。文字列を比較する方法についてはこちらで詳しく解説しているので、ぜひ確認してください!

    strcpy関数で文字列をコピーする方法

    ここではstrcpy関数で文字列をコピーする方法を解説します。strcpy関数は、第1引数にコピー先のアドレス、第2引数にコピー元のアドレスを指定します。strcpy関数の使い方を次のプログラムで確認してみましょう。

    #include <stdio.h>
    #include <string.h>
    
    int main(void) {
    
        char str1[] = "samurai";
        char str2[10];
    
        strcpy(str2, str1);
        printf("str2 = %s", str2);
    
        return 0;
    }

    [実行結果]

    str2 = samurai

    プログラムの実行結果から、strcpy関数で文字列のコピーができていることが確認できます。文字列のコピーについてはこちらで詳しく解説しているので、ぜひ確認してください!

    atoi関数で文字列を数値に変換する方法

    ここではatoi関数で文字列を数値に変換する方法を解説します。atoi関数はchar型の文字列の数値をint型に変換します。atoi関数の使い方を次のプログラムで確認してみましょう。

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void) {
    
        char str[] = "123";
        int num;
    
        num = atoi(str);
        printf("num = %d", num);
    
        return 0;
    }

    [実行結果]

    num = 123

    プログラムの実行結果から、atoi関数でint型に変換できていることが確認できます。文字列を数値に変換する方法についてはこちらで詳しく解説しているので、ぜひ確認してください!

    文字列の連結と分割をする方法

    strcat関数で文字列を連結する方法

    ここではstrcat関数で文字列を連結する方法を解説します。strcat関数は第一引数に渡した文字列へ、第二引数へ渡したの文字列を連結してくれます。

    第一引数へ渡す文字列配列は、連結する文字列も入りきる大きさを持っている必要があるので注意しましょう。また戻り値にも2つの文字列を連結した結果の、文字列のポインタを返します。strcat関数の使い方を次のプログラムで確認してみましょう。

    #include 
    #include 
     
    int main(void) {
        char str1[30] = "Hello ";
        char str2[] = "World!";
        
        // 文字列の連結
        strcat(str1, str2);
        printf("str1の文字列は: %s\n", str1);
        
        return 0;
    }

    [実行結果]

    str1の文字列は: Hello World!

    プログラムの実行結果から、strcat関数で文字列の連結ができていることが確認できます。

    strtok関数で文字列を分割する方法

    ここではstrtok関数で文字列を区切り文字で分割する方法を解説します。strtok関数の第1引数には分割する文字列、第2引数には区切り文字を指定します。

    戻り値は区切り文字で分割された文字列のポインタを返します。strtok関数の使い方を次のプログラムで確認してみましょう。

    #include <stdio.h>
    #include <string.h>
    
    int main(void) {
    
        char str1[] = "1,23,456";
        char *str2;
    
        str2 = strtok(str1, ",");
        printf("%s\n", str2);
    
        while (str2 != NULL) {
            str2 = strtok(NULL, ",");
    
            if (str2 != NULL) {
                printf("%s\n", str2);
            }
        }
    
        return 0;
    }

    [実行結果]

    1
    23
    456

    プログラムの実行結果から、strtok関数で文字列を分割できていることが確認できます。文字列の連結と分割をする方法についてはこちらで詳しく解説しているので、ぜひ確認してください!

    正規表現を使って文字列を検索する方法

    文字列のパターンを指定して特定の文字列が含まれているかを検索するには、正規表現を使います。正規表現を使って文字列を検索する方法は複雑になるため、こちらの記事で詳しく解説しています。

    ぜひ確認してください!

    まとめ

    いかがでしたか?今回は文字列の使い方について解説しました。文字列の操作にはコピーや連結などの便利な関数があるのでぜひ活用してくださいね!

    もし、文字列を使う方法を忘れてしまったらこの記事を確認してください!

    この記事を書いた人

    【プロフィール】
    DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
    累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
    【専門分野】
    IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

    目次