月ノ書

<C言語>文字列と文字列操作関数

今回の記事でわかること
  • 文字列の扱い方が分かる
  • 文字列捜査に使う標準関数が分かる
  • 比較・結合・検索などの基本操作が理解できる

文字列とは

C言語では、文字列は char 型の配列で表します。文字列の末尾には必ず NULL 文字(\0)が必要です

#include <stdio.h>

int main(void) {
    char str[] = "Hello, C!";
    printf("%s\n", str);
    return 0;
}

/*出力結果
Hello, C!
*/

%s は文字列を出力するフォーマット指定子で、str は char 型の配列として扱われる

文字列操作関数

C言語では文字列専用の操作関数が <string.h> に用意されています

文字列の長さを調べる

#include <stdio.h>
#include <string.h>

int main(void) {
    char str[] = "Hello, C!";
    printf("文字列の長さ: %lu\n", strlen(str));
    return 0;
}

/*出力結果
文字列の長さ: 9
*/

strlen は NULL 文字は含まず、実際の文字数だけを返します

文字列のコピー

#include <stdio.h>
#include <string.h>

int main(void) {
    char str1[] = "Hello";
    char str2[20];

    strcpy(str2, str1);  // str1 を str2 にコピー
    printf("コピー後: %s\n", str2);
    return 0;
}

/*出力結果
コピー後: Hello
*/

コピー先の配列は十分な大きさを確保する必要があり、サイズ不足だとバッファオーバーフローの原因になります

文字列の結合

#include <stdio.h>
#include <string.h>

int main(void) {
    char str1[20] = "Hello";
    char str2[] = ", C!";

    strcat(str1, str2);  // str1 に str2 を結合
    printf("結合後: %s\n", str1);
    return 0;
}

/*出力結果
結合後: Hello, C!
*/

接続先の配列も十分な大きさが必要

文字列の比較

#include <stdio.h>
#include <string.h>

int main(void) {
    char str1[] = "abc";
    char str2[] = "abd";

    int result = strcmp(str1, str2);  // 比較
    if(result == 0) {
        printf("同じ文字列\n");
    } else if(result < 0) {
        printf("str1 < str2\n");
    } else {
        printf("str1 > str2\n");
    }
    return 0;
}

/*出力結果
str1 < str2
*/

strcmp は同じなら0,左が小さいなら負の値、左が大きいなら正の値を返します

文字列の検索

#include <stdio.h>
#include <string.h>

int main(void) {
    char str[] = "Hello, C!";
    char *p = strchr(str, 'C');  // 'C' を探す

    if(p != NULL) {
        printf("見つかった位置: %ld\n", p - str);
    } else {
        printf("見つからなかった\n");
    }
    return 0;
}

/*出力結果
見つかった位置: 7
*/

strchr は最初に見つかった文字のポインタを返します。見つからなかった場合は NULL

学習進捗

0
Would love your thoughts, please comment.x