この記事では、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!
以上が、ポインタを使った文字列操作の基本的な内容です。
ポインタを使うことで、文字列の長さの取得や逆順への変換、部分文字列の取得、文字列の置換など、さまざまな操作が可能になります。
ぜひ、これらの操作を使って、自分自身で文字列を操作する練習をしてみてください。