ポインタstrが文字列の先頭要素を表している時、その文字列に含まれる数字、符号+及びー以外の文字を削除する関数 void del_char(char *str) を作成しなさい。例えば、文字列が A-+1BC2+3D/0であれば-123とする。なお符号についても、数字より前にある最初のもの以外は、削除するものとする。
っていう問題なんですが、教えてもらえませんか?
おねがいします!
Re:おねがいします!
先頭から順に見ていって、
1、現在対象の文字が符号かどうか(符号文字が出たかどうか)
2、現在対象の文字が数字かどうか→数字ならキューにpush
3、1、2を繰り返し、すべて終わったら、(あれば)符号文字とキューからpopしたものを組み合わせる
自分ならばそんな風にやるかもしれないです。
1、現在対象の文字が符号かどうか(符号文字が出たかどうか)
2、現在対象の文字が数字かどうか→数字ならキューにpush
3、1、2を繰り返し、すべて終わったら、(あれば)符号文字とキューからpopしたものを組み合わせる
自分ならばそんな風にやるかもしれないです。
Re:おねがいします!
記号・・・というのは恐らくソース(英字)のことかと思います。。。
kazuoniさんの書いていることを理解しようとしていますか?
宿題のまるなげな気がします。
kazuoniさんの書いていることを理解しようとしていますか?
宿題のまるなげな気がします。
Re:おねがいします!
っということは、まだC言語はほぼ入門ですかね^^;
まぁ、あえてキューなんて使わなくてもいいので、忘れてください。
この掲示板の規約の通り「宿題の丸投げ」は厳禁です。
なので、考え方の一つとして、自分はNo:42554の回答を書きました。
まず、授業でどこまでやっているかを見直してください。
一番最初にポインタをと書かれているので、文字列操作の一環の宿題かなと思います。
一番簡単な考え方は、
0、関数del_charに渡された文字列(のポインタ)strを関数del_charのローカル変数である文字列配列(変数名temp)にコピーする
1、tempを先頭から最後(\0)まで探査し、(初めに登場する)記号文字(+ or -)を見つけ、その文字をstr[0]に格納する
2、tempを先頭から最後(\0)まで探査し、登場した0~9はstr[1]以降に順に格納していく
3、すべて終了したら、strの最後に'\0'を格納する
こんな感じでいいかと思います。
まぁ、あえてキューなんて使わなくてもいいので、忘れてください。
この掲示板の規約の通り「宿題の丸投げ」は厳禁です。
なので、考え方の一つとして、自分はNo:42554の回答を書きました。
まず、授業でどこまでやっているかを見直してください。
一番最初にポインタをと書かれているので、文字列操作の一環の宿題かなと思います。
一番簡単な考え方は、
0、関数del_charに渡された文字列(のポインタ)strを関数del_charのローカル変数である文字列配列(変数名temp)にコピーする
1、tempを先頭から最後(\0)まで探査し、(初めに登場する)記号文字(+ or -)を見つけ、その文字をstr[0]に格納する
2、tempを先頭から最後(\0)まで探査し、登場した0~9はstr[1]以降に順に格納していく
3、すべて終了したら、strの最後に'\0'を格納する
こんな感じでいいかと思います。
Re:おねがいします!
こんな感じでは?
言外の仕様が潜んでいるかもしれませんね。
#include <stdio.h> #include <ctype.h> void del_char(char *str) { char *ss; for (ss = str; *ss != '\0'; ss++) { int c = (unsigned char)*ss; if (isdigit(c) || c == '+' || c == '-') { *str++ = c; break; } } for (; *ss != '\0'; ss++) { int c = (unsigned char)*ss; if (isdigit(c)) *str++ = c; } *str = '\0'; } int main(void) { char s[/url] = "A-+1BC2+3D/0"; del_char(s); puts(s); return 0; }ただし、文字列が"A-+1BC2+3D/0"のときの結果は"-1230"になります。
言外の仕様が潜んでいるかもしれませんね。
Re:おねがいします!
すみません。この答えてもらった文中でint型の変数cに代入するのに(unsigned char)とキャストしているのはどうしてですか?わかる方お願いします。