Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語で文字列の指定位置からn文字を削除するプログラム


問題

与えられた文字列の指定した位置からn文字を削除するユーザー定義関数を作成します。ここで、文字列は実行時にユーザーによって入力されるものとします。

解決策

文字列からn文字を削除するには、以下に示す手順に従って処理を行います。

アルゴリズム

文字列からn文字を削除するためのアルゴリズムは以下の通りです。

ステップ1 − 処理を開始する

ステップ2 − 実行時に文字列を読み込む

ステップ3 − 削除を開始する位置を読み込む

ステップ4 − その位置から削除する文字数nを読み込む

ステップ5 − 関数 deletestr(str,p,n) を呼び出し、ステップ7へ進む

ステップ6 − 処理を終了する

ステップ7 − 呼び出された関数 deletestr(str,p,n) の内部処理

1. i = 0, j = 0 として str の長さまで繰り返す
2. もし i = p-1 ならば
3.     i = i + n
4. str[j] = str[i]
5. str[j] = NULL
6. str を表示する

サンプルプログラム

以下は、文字列からn文字を削除するCプログラムの例です。

#include <stdio.h>
#include <conio.h>
// 関数のプロトタイプ宣言
void del_str(char [],int, int);
main(){
    int n,p;
    char str[30];
    printf("\n Enter the String:");
    gets(str);
    fflush(stdin);
    printf("\n Enter the position from where the characters are to be deleted:");
    scanf("%d",&p);
    printf("\n Enter Number of characters to be deleted:");
    scanf("%d",&n);
    del_str(str,p,n);
}
// 関数の呼び出し
void del_str(char str[],int p, int n){
    int i,j;
    for(i=0,j=0;str[i]!='\0';i++,j++){
        if(i==(p-1)){
            i=i+n;
        }
        str[j]=str[i];
    }
    str[j]='\0';
    puts(" The string after deletion of characters:");
    puts(str);
}

プログラムのポイント

del_str関数では、2つのインデックス変数 i と j を使用しています。i は元の文字列を先頭から順に走査するためのもので、j は新しい文字列の書き込み位置を示します。i が削除開始位置(p-1)に達した時点で、i を n だけ先に進めることで、削除対象となるn文字をスキップします。これにより、削除したい部分以外の文字だけが詰め直され、最後に終端文字 '\0' を代入して新しい文字列が完成します。

なお、サンプルで使用している gets 関数はバッファオーバーフローの危険があるため、現在では標準規格から廃止されています。実際の開発では、fgets などより安全な入力関数を使うことをおすすめします。

実行結果

上記のプログラムを実行すると、以下のような結果が出力されます。

Enter the String:Tutorials Point C programming

Enter the position from where the characters are to be deleted:10

Enter Number of characters to be deleted:6
The string after deletion of characters:
Tutorials C programming

この例では、10文字目から6文字分の文字列が削除され、「Tutorials C programming」という結果が得られています。

  1. Javaで文字列内の文字がアルファベット順かどうかをチェックする方法

    Javaで文字列内の文字がアルファベット順(昇順)に並んでいるかどうかを判定するには、隣り合う文字同士を順番に比較していく方法が有効です。以下にその実装例を示します。 サンプルコード public class Demo{ static boolean alphabetical_order(String my_str){ int str_len = my_str.length(); for (int i = 1; i < str_len; i++){ if (my_str.charAt(i) < my_str.charAt(i - 1

  2. 【Python入門】文字列リストから指定範囲の文字を抽出する方法

    文字列のリストから指定した範囲の文字を抽出したい場合、リスト内包表記とスライス(list slicing)を組み合わせることで、シンプルかつ効率的に実現できます。この記事では、具体的なサンプルコードとその実行結果をもとに、処理の流れをわかりやすく解説します。サンプルコード以下が実際のコード例です。my_list = [python, is, fun, to, learn] print(The list is :) print(my_list) start, end = 11, 25 my_result = .join([element for element in my_list])[s