ここから本文です

問題 与えられた文字列から,指定された部分の文字列を複製して,別の場所...

kenさん

2019/8/1610:00:03

問題


与えられた文字列から,指定された部分の文字列を複製して,別の場所に挿入する操作(コピー&ペースト)を,リストを使って実現するプログラムを作成しています.
作成途中の

プログラムです.
このプログラムは,最初に,入力された文字列を,1文字=1ノードでデータを持つようなリスト構造のデータに変換します.
このリスト構造は,双方向リストです.
このあと,
・入力されたコピー開始位置とコピーする長さに従って,文字列を複製し,
・入力された挿入位置の文字の前に挿入する
・挿入された文字列を逆順に表示する
という操作をします.
たとえば,
入力文字列: abcdefg
コピー開始位置: 1 (コピー開始位置は 0から始める)
コピーする長さ: 3
挿入位置: 5 (挿入位置は 0から始める)
であるとき, 
1番目の文字 b から 3文字分: bcd をコピー
文字列  abcdefg の 5番目の文字 f の前にコピーした文字列を挿入
挿入結果は, abcdebcdfg 
これを逆順に表示するので gfdcbedcba と出力
という処理になります.

このプログラムを完成させてください.



実行例
実行結果は,以下のようになるものとします.なお 太字 はキーボードからの入力です.

# kimatsu/toi3-2
string? abcdefg
start? 1
len? 3
paste? 5
g f d c b e d c b a
#
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXLEN 255

/* 構造体の定義 */
typedef struct tag {
    char moji;   /* 文字 */
    struct tag *prev; /* 1つ前のデータへのポインタ変数 */
    struct tag *next; /* 1つ後のデータへのポインタ変数 */
} mojiData;       /* 文字データ */


/* 新データ作成関数 */
mojiData* makeNewNode(char c) {
    mojiData* pNewNode;
    /*** tempData 型のメモリ領域確保 ***/
    pNewNode = (mojiData*)malloc(sizeof(mojiData));
    if (pNewNode != NULL) {
        /*** データ設定 ***/
        pNewNode->moji= c;
        pNewNode->prev = NULL;
        pNewNode->next = NULL;
    }
    return pNewNode ;
}


int main(void) {
    char srcStr[MAXLEN] = "abcdefghjiklmnoqprstvuwxyzabcdefghijlkmnopqrstuvwxyz";
    mojiData *pTop;  /* 文字データリストのトップ */
    mojiData *pLast;  /* 文字データリストの末尾 */
    mojiData *pNow;  /* 文字データリスト内の現在位置 */
    mojiData *pNew;  /* 文字データの新規データ */
    int start; /* 削除開始位置 */
    int len; /* 削除する長さ */
    int paste; /* 挿入位置 */
    int i;

    /* 必要に応じて変数を追加 */

    /* データ入力 */
    /* 文字列 */
    printf("string? ");
    scanf("%s", srcStr);
    /* 削除開始位置と長さと挿入位置 */
    printf("start? ");
    scanf("%d", &start);
    printf("len? ");
    scanf("%d", &len);
    printf("paste? ");
    scanf("%d", &paste);


    /* リスト作成 */
    /* 最初のデータ */
    pTop = makeNewNode(srcStr[0]);
    pNow = pTop;
    /* 2文字目以降 */
    for (i = 1 ; i < strlen(srcStr) ; i++) {
        pNew = makeNewNode(srcStr[i]);
        pNow->next = pNew;
        pNew->prev = pNow;
        pNow = pNew;
    }
    pLast = pNow;


    /* ここにプログラム作成 */


    /* データを逆順に表示 */
    pNow = pLast;
    while (pNow != NULL) {
        printf("%c ", pNow->moji);
        pNow = pNow->prev;
    }
    printf("\n");
    
    return 0 ;
}

閲覧数:
38
回答数:
1

違反報告

ベストアンサーに選ばれた回答

fan********さん

2019/8/2305:12:27

「このプログラムを完成させてください」というのは、プログラム作成の依頼であって質問ではありませんので、誰も回答しないでしょう。

この回答は投票によってベストアンサーに選ばれました!

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる