部分文字列

開始要素の添字と終端要素の添字が分かっていれば、単純なループで部分文字列の取り出しを実装することが出来ます。以下のプログラムは、ある文字列に対して、3文字目から5文字目を取り出しています。

#include<stdio.h>
int main(){
  char target[15] = "Aizu-wakamatsu";
  char sub[3];
  int i, j;
 
  for(i = 2, j = 0; i < 5; i++, j++){
    sub[j] = target[i];
  }
 
  printf("%s\n", sub);
}

このプログラムの実行結果は以下のようになります。

zu-

部分文字列を取り扱う際に注意しなければいけないのが、プログラム上の文字列の添字は 0オリジン である点です。 上で挙げた例のプログラムでは、 3 文字目からの部分文字列が欲しいので、forループのカウンタ変数は1マイナスした値 2 で初期化してあります。

同じ操作を行う関数として、 string.h ライブラリ内の strncpy 関数が挙げられます。 for文を使った部分文字列の抜き出しは、上記でも触れたように添字の操作が必要になるので、ライブラリに実装されている便利な関数を使うのも良いでしょう。

strncpy 関数の使い方は以下になります。

strncpy(コピー先の文字列変数ポインタ, コピー開始位置を示すポインタ, 開始位置から何文字抽出するかを示す整数)

Reference

 

オンラインジャッジではじめるC/C++プログラミング入門 (マイナビ)

AIZU ONLINE JUDGE のコース問題を題材にした解説書です。各トピックごとに C/C++ 言語の基礎的な内容を学習し、Introduction to Programming の演習問題にチャレンジしていきます。内容は敷居の高いものではなく、プログラミング初学者が取り組む例題からスタートしています。