C言語で文字列内の空白をすべて削除するプログラムの書き方と解説
問題
実行時に入力された文字列から、whileループを使って各インデックスの文字が空白かどうかを判定しながら、空白をすべて取り除くプログラムを作成します。
解決策
以下の例を見てみましょう。
このプログラムは、与えられた文字列からすべての空白を削除します。入力文字列が Tutorials Point C Programming の場合、空白を除去した結果は TutorialsPointCProgramming となります。
C言語において、文字型の配列は「文字列」と呼ばれます。
文字列の宣言は以下のように記述します。
char stringname [size];
たとえば、char string[50]; と宣言すれば、最大50文字の長さを持つ文字列を扱えます。
初期化
- 1文字ずつの文字定数を使って初期化する方法。
char string[10] = { 'H', 'e', 'l', 'l', 'o', '\0' }
- 文字列定数を使って初期化する方法。
char string[10] = "Hello";
文字列へのアクセス
文字列にアクセスする際には、制御文字列「%s」を使用します。これにより、終端文字「\0」に到達するまで文字列を読み込むことができます。
文字列間の空白を削除するために使用したロジックは以下の通りです。
while(string[i]!='\0'){
check=0;
if(string[i]==' '){
j=i;
while(string[j-1]!='\0'){
string[j] = string[j+1];
j++;
}
check = 1;
}
if(check==0)
i++;
}
サンプルプログラム
以下は、文字列の概念を利用して文中の空白をすべて削除するCプログラムです。
#include<stdio.h>
int main() {
char string[50];
int i=0, j, check;
printf("Enter any statement: ");
gets(string);
while(string[i]!='\0') {
check=0;
if(string[i]==' ') {
j=i;
while(string[j-1]!='\0') {
string[j] = string[j+1];
j++;
}
check = 1;
}
if(check==0)
i++;
}
printf("\nSentence without spaces: %s", string);
getch();
return 0;
}
実行結果
上記のプログラムを実行すると、以下のような出力が得られます。
Run 1: Enter any statement: Tutorials Point C Programming Sentence without spaces: TutorialsPointCProgramming Run 2: Enter any statement: Welcome to the world of tutorials Sentence without spaces: Welcometotheworldoftutorials
補足: 現在のC標準(C11以降)では、バッファオーバーフローの危険があるため gets() 関数の使用は推奨されていません。実際の開発では、より安全な fgets() の利用を検討してください。また、このアルゴリズムは空白を見つけるたびに後続の文字を1つずつ前方へシフトするため、計算量は最悪でO(n²)となります。パフォーマンスが重要な場面では、空白以外の文字だけを別の配列や同じ配列の先頭から詰めて書き込む方式(O(n))を採用すると効率的です。
-
Pythonで文字列内の単語数をカウントする3つの方法
はじめに Pythonでは、テキスト処理の一環として「文章中に単語がいくつ含まれているか」を数える場面がよくあります。本記事では、与えられた文字列から単語数をカウントするための代表的な3つのアプローチを、具体的なコード例と実行結果とともにわかりやすく解説します。 問題の定義 問題文: 与えられた文字列の中に含まれる単語の数を数える。例えば、「Tutorials point is a learning platform」という文字列には、6個の単語が含まれています。 方法1:split()関数を使う split()関数は、文字列をスペースを区切り文字として分割し、リストを返します。引数を指定
-
Pythonで文中の単語数をカウントする方法|split()とisalpha()を使った2つのアプローチ
本記事では、Pythonを使って文章中の単語数を数えるための解法と、その具体的なアプローチについて詳しく解説します。 問題定義 ある文が与えられたとき、その文に含まれる単語の総数をカウントするプログラムを作成します。 ここでは、以下の2つのアプローチを取り上げます。 アプローチ1: split()関数を使用する方法 アプローチ2: strip()関数とisalpha()関数を組み合わせる方法 アプローチ1:split()関数を使う方法 最もシンプルな方法は、文字列に対してsplit()関数を適用するやり方です。split()はデフォルトで空白文字(スペースやタブなど)を区切りとして文字列を