C言語での空白の削除方法が分かりません。
また、文字列を削除するにはどうすれば良いでしょうか?
例としては、 "AAA BBB" を"AAABBB" へ変更し、
AAAだけを削除し、"BBB"にするという感じにしたいです。
これは作っているプログラムの仕様なので、"AAA "を削除するという回答は実行できません。。
すみません。
C言語での空白削除
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: C言語での空白削除
文字列は文字の配列だということが理解できていれば自ずと分かると思います。
とりあえず、何文字目に空白があるか調べるプログラムを書いて見ませんか?
あとC言語の標準関数を使うのはなしですか?
とりあえず、何文字目に空白があるか調べるプログラムを書いて見ませんか?
あとC言語の標準関数を使うのはなしですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C言語での空白削除
一応何文字目に空白があるか調べるプログラムを書いてみました。softya(ソフト屋) さんが書きました:文字列は文字の配列だということが理解できていれば自ずと分かると思います。
とりあえず、何文字目に空白があるか調べるプログラムを書いて見ませんか?
あとC言語の標準関数を使うのはなしですか?
int a=0,b=0;
char test[300] = "";
printf(">>");
fgets(test, sizeof(test), stdin);
for(b=0;;b++){
if(isspace(test[b]) != 0){
printf("%d文字目に空白あり\n", b+1);
a++;
}
if(test[b] == '\0'){
break;
}
}
printf("合計空白数:%d\n", a);
あと、標準関数使います。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: C言語での空白削除
それでは、その見つかった空白の位置を返す関数にしてみてください。
あと空白後に何文字あるか調べる関数を作ってみましょう。
それができたら、こうすれば空白文字を削除できます。
(1)空白の位置 = 空白の位置関数();
(2)空白後の文字数 = 空白後の文字数の関数(空白の位置)
(3)空白の位置から空白後の文字数分ループして文字列配列を1つ前に詰める処理。
あと空白後に何文字あるか調べる関数を作ってみましょう。
それができたら、こうすれば空白文字を削除できます。
(1)空白の位置 = 空白の位置関数();
(2)空白後の文字数 = 空白後の文字数の関数(空白の位置)
(3)空白の位置から空白後の文字数分ループして文字列配列を1つ前に詰める処理。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C言語での空白削除
あの、空白の位置を返すとはどんな感じでしょうか?softya(ソフト屋) さんが書きました:それでは、その見つかった空白の位置を返す関数にしてみてください。
あと空白後に何文字あるか調べる関数を作ってみましょう。
それができたら、こうすれば空白文字を削除できます。
(1)空白の位置 = 空白の位置関数();
(2)空白後の文字数 = 空白後の文字数の関数(空白の位置)
(3)空白の位置から空白後の文字数分ループして文字列配列を1つ前に詰める処理。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: C言語での空白削除
int型の戻り値で配列の添字番号を返せば良いと思います。
もし無かった時は-1でどうでしょうか?
もし無かった時は-1でどうでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C言語での空白削除
少し分からなくなってきたので、、一応ソースを上げます。softya(ソフト屋) さんが書きました:int型の戻り値で配列の添字番号を返せば良いと思います。
もし無かった時は-1でどうでしょうか?
int main(void)
{
int test;
char mozi[100];
printf(">>");
fgets(mozi, sizeof(mozi), stdin);
test = Search(mozi);
printf("%d文字目に空白あり\n", test);
return 0;
}
int Search(char str[])
{
int i;
int a = -1;
for(i=0; ;i++){
if(isspace(str[i]) != 0){
a = i+1;
}
if(str[i] == '\0'){
break;
}
}
return a;
}
・まず、二つ空白が合った場合の対処が出来ません。
・次に、何故か入力した文字 + 1の値が帰ってきます。
Re: C言語での空白削除
fgets()で取得する文字列は、最後に'\n'(空白文字の一種)を含みます。例えば、 と入力すると、配列には が入ります。x_kai さんが書きました: ## エラー ##
・まず、二つ空白が合った場合の対処が出来ません。
・次に、何故か入力した文字 + 1の値が帰ってきます。
今のSearch()では、文字列の途中に空白文字を見つけたとしても、
とにかく最後まで探索しています。
そして、'\n'を見つけた時点で入力した文字数(上記の例では5)+1の6を返しているのです。
空白文字が複数あった場合の対処については、Search()の仕様を一から見直す必要があるような気がします。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: C言語での空白削除
>まず、二つ空白が合った場合の対処が出来ません。
その事については説明がなかったので、とりあえず後回しにしました。
ちなみにどうするかというと空白が無くなるまでループすれば良いです。
もう一つの件はboxさんの書かれたとおりですね。
その事については説明がなかったので、とりあえず後回しにしました。
ちなみにどうするかというと空白が無くなるまでループすれば良いです。
もう一つの件はboxさんの書かれたとおりですね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。