【C言語】ポインタを使った文字列操作について解説

この記事では、C言語のポインタを使った文字列操作について学びます。

ポインタを使うことで、文字列の長さの取得や逆順への変換、部分文字列の取得、文字列の置換など、さまざまな操作が可能になります。

また、ポインタを使った文字列操作の注意点も紹介します。

初心者の方でもわかりやすく解説しているので、ぜひ参考にしてみてください。

目次から探す

ポインタを使った文字列操作

C言語では、ポインタを使って文字列を操作することができます。

ポインタを使うことで、文字列の長さの取得や逆順への変換、部分文字列の取得、文字列の置換など、さまざまな操作が可能になります。

以下では、それぞれの操作について詳しく説明します。

ポインタを使った文字列の長さの取得

文字列の長さを取得するには、strlen関数を使います。

この関数は、引数として文字列の先頭アドレスを渡すと、その文字列の長さを返してくれます。

#include <stdio.h>
#include <string.h>
int main() {
    char str[] = "Hello, World!";
    int length = strlen(str);
    
    printf("文字列の長さ: %d\n", length);
    
    return 0;
}

上記のコードでは、strlen関数を使って文字列Hello, World!の長さを取得し、その結果をlength変数に代入しています。

そして、printf関数を使って結果を表示しています。

実行結果は以下のようになります。

文字列の長さ: 13

ポインタを使った文字列の逆順への変換

文字列を逆順にするには、ポインタを使って文字列の先頭と末尾を入れ替える方法があります。

以下のコードでは、ポインタを使って文字列を逆順に変換しています。

#include <stdio.h>
#include <string.h>
void reverseString(char* str) {
    int length = strlen(str);
    char* start = str;
    char* end = str + length - 1;
    
    while (start < end) {
        char temp = *start;
        *start = *end;
        *end = temp;
        
        start++;
        end--;
    }
}
int main() {
    char str[] = "Hello, World!";
    
    printf("変換前: %s\n", str);
    
    reverseString(str);
    
    printf("変換後: %s\n", str);
    
    return 0;
}

上記のコードでは、reverseString関数を定義しています。

この関数は、引数として文字列の先頭アドレスを受け取り、その文字列を逆順に変換します。

具体的な処理は、ポインタstartを文字列の先頭に、ポインタendを文字列の末尾に設定し、ポインタstartがポインタendよりも前にある限り、ポインタstartとポインタendが指す文字を入れ替えていくというものです。

実行結果は以下のようになります。

変換前: Hello, World!
変換後: !dlroW ,olleH

ポインタを使った文字列の部分文字列の取得

文字列の一部分を取得するには、ポインタを使って指定した位置からの文字列を取得する方法があります。

以下のコードでは、ポインタを使って文字列の一部分を取得しています。

#include <stdio.h>
#include <string.h>
void getSubstring(char* str, int start, int length, char* result) {
    int strLength = strlen(str);
    
    if (start < 0 || start >= strLength || length <= 0 || start + length > strLength) {
        strcpy(result, "");
        return;
    }
    
    strncpy(result, str + start, length);
    result[length] = '\0';
}
int main() {
    char str[] = "Hello, World!";
    char result[10];
    
    getSubstring(str, 7, 5, result);
    
    printf("部分文字列: %s\n", result);
    
    return 0;
}

上記のコードでは、getSubstring関数を定義しています。

この関数は、引数として文字列の先頭アドレス、開始位置、長さ、結果を格納するための配列を受け取り、指定した位置から指定した長さの部分文字列を取得します。

具体的な処理は、指定した位置から指定した長さの文字列をstrncpy関数を使ってresult配列にコピーしています。

実行結果は以下のようになります。

部分文字列: World

ポインタを使った文字列の置換

文字列の一部を別の文字列で置換するには、ポインタを使って指定した位置からの文字列を別の文字列で置き換える方法があります。

以下のコードでは、ポインタを使って文字列の一部を置換しています。

#include <stdio.h>
#include <string.h>
void replaceString(char* str, int start, int length, char* replacement) {
    int strLength = strlen(str);
    int replacementLength = strlen(replacement);
    
    if (start < 0 || start >= strLength || length <= 0 || start + length > strLength) {
        return;
    }
    
    memmove(str + start + replacementLength, str + start + length, strLength - start - length + 1);
    memcpy(str + start, replacement, replacementLength);
}
int main() {
    char str[] = "Hello, World!";
    
    replaceString(str, 7, 5, "Universe");
    
    printf("置換後: %s\n", str);
    
    return 0;
}

上記のコードでは、replaceString関数を定義しています。

この関数は、引数として文字列の先頭アドレス、開始位置、長さ、置換する文字列を受け取り、指定した位置から指定した長さの文字列を別の文字列で置き換えます。

具体的な処理は、memmove関数を使って置換後の文字列を移動させ、memcpy関数を使って置換する文字列をコピーしています。

実行結果は以下のようになります。

置換後: Hello, Universe!

以上が、ポインタを使った文字列操作の基本的な内容です。

ポインタを使うことで、文字列の長さの取得や逆順への変換、部分文字列の取得、文字列の置換など、さまざまな操作が可能になります。

ぜひ、これらの操作を使って、自分自身で文字列を操作する練習をしてみてください。

1 2
目次から探す