C言語でstrtok()を使って文字列を単語ごとに分割して出力する方法
文字列 s に、いくつかの単語から構成される文が格納されているとします。ここで、各単語を新しい行に出力することを考えます。このような処理には、string.h ヘッダーファイルで定義されている strtok() 関数を利用できます。
strtok() 関数は、対象となる文字列と区切り文字(デリミタ)の2つの引数を受け取ります。今回は区切り文字として空白 " " を指定します。
例えば、入力が s = "Let us see some string tokenizing fun" の場合、出力は次のようになります。
Let us see some string tokenizing fun
解決の手順
この問題は、以下の手順で解決できます。
token := strtok(s, " ")を呼び出し、最初の単語を取得します(区切り文字は" ")。tokenが NULL でない限り、以下を繰り返します。tokenの内容を表示します。token := strtok(NULL, " ")として、次のトークンを取得します。2回目以降の呼び出しでは、第一引数に NULL を渡し、同じ区切り文字" "を指定します。
実装例
理解を深めるために、実際の実装を見てみましょう。
#include <stdio.h>
#include <string.h>
int main(){
char s[] = "Let us see some string tokenizing fun";
char* token = strtok(s, " ");
while (token) {
printf("%s\n", token);
token = strtok(NULL, " ");
}
}
入力
Let us see some string tokenizing fun
出力
Let us see some string tokenizing fun
注意点
strtok() は内部で元の文字列を書き換えます(区切り文字の位置をヌル文字 '\0' に置き換える)ため、元の文字列を後で利用したい場合は、あらかじめ別のバッファにコピーしておく必要があります。また、strtok() はスレッドセーフではないため、マルチスレッド環境では strtok_r()(POSIX)などの再入可能な代替関数の使用が推奨されます。
-
指定された文字列のすべての順列を出力するPythonプログラム
本記事では、以下の問題に対する解決策について詳しく学んでいきます。 問題文 1つの文字列が与えられたとき、その文字列から作成できるすべての順列(並べ替えの組み合わせ)を表示する必要があります。 それでは、以下の実装例で具体的な解決策を見ていきましょう。 実装例 # リストを文字列に変換 def toString(List): return .join(List) # 順列の生成 def permute(a, l, r): if l == r: print(toString(a)) else: for i in range(l, r +
-
文字列の中から偶数の長さの単語を出力するPythonプログラム
本記事では、与えられた問題を解決するための考え方と実装方法について解説します。Pythonの基本的な文字列操作を組み合わせることで、初心者の方でも簡単に実装できる内容となっています。 問題文 文字列が与えられたとき、その中に含まれる単語のうち、文字数が偶数であるものをすべて画面に表示するプログラムを作成します。 例えば、「tutorial point」という文字列が入力された場合、「tutorial」は8文字(偶数)なので出力され、「point」は5文字(奇数)なので出力されません。 解決のアプローチ この問題は、以下の手順で解決できます。 split()関数を使って、入力文字列を空白区切り