C言語初心者です。
知識は入門書を読みポインタに触れたところぐらいまで、身についているかどうか怪しいところもあります。
コマンドプロンプト上で文字列を加筆修正するためのプログラムを作りたいと思っているのですが、
まずそのようなプログラムは実装可能なのでしょうか。
例としては
str[] = "abcdefg";
と文字列が格納されていたとして
abcdefg
とまず表示し、文字を入力したり、バックスペースキーで文字列を消したりして
abcxyz
のように文字列を変更できるようなプログラムです。
scanfやfgetsなどの関数では文字列を加筆修正というのはできませんし、
オリジナルの関数を作ろうにも、アイデアが浮かびません。
助言よろしくお願いします。
C言語で加筆修正を行うプログラムは作れるのでしょうか
-
- 記事: 21
- 登録日時: 9年前
- 住所: 近畿
Re: C言語で加筆修正を行うプログラムは作れるのでしょうか
初めまして double-clutch. と申します。
自分も初心者です。
『文字列の加筆修正』は可能だと思います。
『文字列の置換』をC_codeで実装した例は、下のページに投稿されています。
http://dixq.net/forum/blog.php?u=2191&b=6090
自分も初心者です。
『文字列の加筆修正』は可能だと思います。
『文字列の置換』をC_codeで実装した例は、下のページに投稿されています。
http://dixq.net/forum/blog.php?u=2191&b=6090
Re: C言語で加筆修正を行うプログラムは作れるのでしょうか
回答ありがとうございます。
サッとコードを確認させていただきましたが、これはあらかじめ存在した文字列に文字列検索を行い、
検索でヒットした場合はそこを別の文字列に置換するといったプログラムでしょうか。
ご回答していただいたのに心苦しいのですが、
このコードは問題点がある上にバックスペースによる文字の削除などを用いた
リアルタイム(?)な修正を行うことができないのではと思いました。
確かに”文字列の加筆修正”を行うことはできますが、
文字列を表示してその表示した文字列を加筆修正することで違う文字列に変更させる
ということはできないのでしょうか
サッとコードを確認させていただきましたが、これはあらかじめ存在した文字列に文字列検索を行い、
検索でヒットした場合はそこを別の文字列に置換するといったプログラムでしょうか。
ご回答していただいたのに心苦しいのですが、
このコードは問題点がある上にバックスペースによる文字の削除などを用いた
リアルタイム(?)な修正を行うことができないのではと思いました。
確かに”文字列の加筆修正”を行うことはできますが、
文字列を表示してその表示した文字列を加筆修正することで違う文字列に変更させる
ということはできないのでしょうか
Re: C言語で加筆修正を行うプログラムは作れるのでしょうか
C の標準ライブラリ関数だけでは実現できません。
OS が提供する API を使用しなければなりません。
Windows なら、<conio.h> の _getch (バッファリングなし、エコーなし 1文字入力)など。
Linux なら、libncursesライブラリや、ioctl システムコールによる端末ドライバ設定など。
_getch を使ったプログラムを書いてみました。
Tab, Delete, Esc などのキー入力にどう対応するかは自分で考えてみてください。
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;
}
Re: C言語で加筆修正を行うプログラムは作れるのでしょうか
標準ライブラリ関数だけでは実現できないのですね。
参考にさせていただきます。
わざわざコードまで書いていただいてありがとうございました。
参考にさせていただきます。
わざわざコードまで書いていただいてありがとうございました。