C言語で加筆修正を行うプログラムは作れるのでしょうか

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
みずなし

C言語で加筆修正を行うプログラムは作れるのでしょうか

#1

投稿記事 by みずなし » 9年前

C言語初心者です。
知識は入門書を読みポインタに触れたところぐらいまで、身についているかどうか怪しいところもあります。
コマンドプロンプト上で文字列を加筆修正するためのプログラムを作りたいと思っているのですが、
まずそのようなプログラムは実装可能なのでしょうか。

例としては
str[] = "abcdefg";
と文字列が格納されていたとして
abcdefg
とまず表示し、文字を入力したり、バックスペースキーで文字列を消したりして
abcxyz
のように文字列を変更できるようなプログラムです。

scanfやfgetsなどの関数では文字列を加筆修正というのはできませんし、
オリジナルの関数を作ろうにも、アイデアが浮かびません。
助言よろしくお願いします。

double-clutch.
記事: 21
登録日時: 9年前
住所: 近畿

Re: C言語で加筆修正を行うプログラムは作れるのでしょうか

#2

投稿記事 by double-clutch. » 9年前

初めまして double-clutch. と申します。
自分も初心者です。


『文字列の加筆修正』は可能だと思います。

『文字列の置換』をC_codeで実装した例は、下のページに投稿されています。

http://dixq.net/forum/blog.php?u=2191&b=6090

みずなし

Re: C言語で加筆修正を行うプログラムは作れるのでしょうか

#3

投稿記事 by みずなし » 9年前

回答ありがとうございます。
サッとコードを確認させていただきましたが、これはあらかじめ存在した文字列に文字列検索を行い、
検索でヒットした場合はそこを別の文字列に置換するといったプログラムでしょうか。

ご回答していただいたのに心苦しいのですが、
このコードは問題点がある上にバックスペースによる文字の削除などを用いた
リアルタイム(?)な修正を行うことができないのではと思いました。

確かに”文字列の加筆修正”を行うことはできますが、
文字列を表示してその表示した文字列を加筆修正することで違う文字列に変更させる
ということはできないのでしょうか

かずま

Re: C言語で加筆修正を行うプログラムは作れるのでしょうか

#4

投稿記事 by かずま » 9年前

C の標準ライブラリ関数だけでは実現できません。
OS が提供する API を使用しなければなりません。
Windows なら、<conio.h> の _getch (バッファリングなし、エコーなし 1文字入力)など。
Linux なら、libncursesライブラリや、ioctl システムコールによる端末ドライバ設定など。

_getch を使ったプログラムを書いてみました。

コード:

#include <stdio.h>  // printf, fflush, stdout
#include <string.h> // strlen
#include <ctype.h>  // isprint
#include <conio.h>  // _getch, _putch, _cputs

int getline(char *str, int size)
{
    int pos = strlen(str);
    size--;  // '\0' のために 1バイト確保
    _cputs(str);
    while (1) {
        int c = _getch();
        if (isprint(c)) {  // 表示可能な文字
            if (pos < size) {
                _putch(c);
                str[pos++] = c;
            }
        }
        else if (c == '\b') {  // Backspace
            if (pos > 0) {
                _cputs("\b \b");
                pos--;
            }
        }
        else if (c == '\r') {  // Enter
            _cputs("\r\n");
            str[pos] = '\0';
            return 0;
        }
        else if (c == '\x03' || c == '\x1a') {  // Ctrl-C or Ctrl-Z
            str[pos] = '\0';
            return c;
        }
    }
}

int main(void)
{
    char str[256] = "abcdefg";
    int c;
    while (1) {
        printf(">> "), fflush(stdout);
        c = getline(str, sizeof str);
        if (c != 0) break;
        printf("str = [%s]\n", str);
    }
    return 0;
}
Tab, Delete, Esc などのキー入力にどう対応するかは自分で考えてみてください。

みずなし

Re: C言語で加筆修正を行うプログラムは作れるのでしょうか

#5

投稿記事 by みずなし » 9年前

標準ライブラリ関数だけでは実現できないのですね。
参考にさせていただきます。
わざわざコードまで書いていただいてありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る