
1: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 14:00:24.24 ID:QlC5DcF/0.net
課題ができない助けて
標準入力からデータを取り出すプログラムを考える。
最初の1行にはデータの終わりを示す文字列が入力され、2行目からはデータが入力される。
データの終わりを示す文字列は最大10バイト・最小3バイトとし、データ中に同じ文字列は出現しないとする。
データは最大バイト数も最小バイト数も決まっていないとする。
(例)
ABCDE
this is firstABCDEthis is secondABCDEABCDE
続く
標準入力からデータを取り出すプログラムを考える。
最初の1行にはデータの終わりを示す文字列が入力され、2行目からはデータが入力される。
データの終わりを示す文字列は最大10バイト・最小3バイトとし、データ中に同じ文字列は出現しないとする。
データは最大バイト数も最小バイト数も決まっていないとする。
(例)
ABCDE
this is firstABCDEthis is secondABCDEABCDE
続く
3: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 14:01:20.97 ID:QlC5DcF/0.net
このとき、以下の関数を作成せよ。
配列の先頭のポインタarrayと配列の大きさnを引数に取り、データからn-1文字だけ配列に格納し終端にヌル文字を付加する関数。
ただし、格納する文字列は前回の呼び出しで格納した文字列からの続きとし、データの終わりを示す文字列を検知した場合はそれを含めずその時点でヌル文字を付加する。
(例)
void func( char *array, int n);
(プログラム例)
(実行結果)
配列の先頭のポインタarrayと配列の大きさnを引数に取り、データからn-1文字だけ配列に格納し終端にヌル文字を付加する関数。
ただし、格納する文字列は前回の呼び出しで格納した文字列からの続きとし、データの終わりを示す文字列を検知した場合はそれを含めずその時点でヌル文字を付加する。
(例)
void func( char *array, int n);
(プログラム例)
int main()
{
char array[7];
func(array, 7);
printf("312¥n", array);
func(array, 7);
printf("176¥n", array);
func(array, 7);
printf("¥n", array);
func(array, 7);
printf("¥n", array);
return 0;
}
{
char array[7];
func(array, 7);
printf("312¥n", array);
func(array, 7);
printf("176¥n", array);
func(array, 7);
printf("¥n", array);
func(array, 7);
printf("¥n", array);
return 0;
}
(実行結果)
this i
s firs
t
this i
s firs
t
this i
2: ◆2GWTBs9QQk 2014/12/22(月) 14:00:49.58 ID:e2HR7kVAE.net
学校に通報
4: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 14:03:04.92 ID:QlC5DcF/0.net
>>2
やめてもし特定できても言わないでください
やめてもし特定できても言わないでください
5: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 14:03:57.01 ID:YxlzTDqME.net
「できませんでしたでも単位ください」
と書いて提出しましょう
と書いて提出しましょう
6: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 14:07:25.13 ID:QlC5DcF/0.net
そんなことしたら不名誉なレッテル貼られて卒業まで苦しむことになります
8: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 14:12:16.55 ID:dWfsVrLdx.net
課題は自分でやれ
9: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 14:14:21.98 ID:QlC5DcF/0.net
自分で考えてみましたけど無理です
友人もできてないみたいです
友人もできてないみたいです
10: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 14:18:56.50 ID:XfseTZR4K.net
データ終端をプログラム固定にしていいのか
標準入力の一行目から読み取るのかで話が変わってくるぞこれ
標準入力の一行目から読み取るのかで話が変わってくるぞこれ
12: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 14:24:56.74 ID:QlC5DcF/0.net
>>10
どういうことですか?
どういうことですか?
13: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 14:45:38.34 ID:XfseTZR4K.net
>>12
そのままだよ
例でABCDEになってるところは決めうちでいいのか?
それとも毎回違うのか?ってこと
しかし一行目がデータ終端のみになってるところを見ると後者だろうな
そのままだよ
例でABCDEになってるところは決めうちでいいのか?
それとも毎回違うのか?ってこと
しかし一行目がデータ終端のみになってるところを見ると後者だろうな
14: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 14:52:02.58 ID:6ntb1lUJ0.net
>データ中に同じ文字列は出現しないとする。
これどういう意味?
これどういう意味?
16: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 14:53:57.96 ID:QlC5DcF/0.net
>>13
なるほど
>>14
たぶん例だったらデータがABCDEになることは無いってことだと思います
なるほど
>>14
たぶん例だったらデータがABCDEになることは無いってことだと思います
17: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 15:04:30.72 ID:XfseTZR4K.net
この問題考えたやつアホだな…
18: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 15:09:51.58 ID:QlC5DcF/0.net
もしかして解なしにワンチャンありますか?
19: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 15:11:01.80 ID:6ntb1lUJ0.net
関数内static変数は要るな
データを含む文字列のn文字目まで終端文字列が無いか検索して、場合分けでいけそう
データを含む文字列のn文字目まで終端文字列が無いか検索して、場合分けでいけそう
21: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 15:15:38.01 ID:6ntb1lUJ0.net
いや関数内だとデータ渡せないな、というか
>データは最大バイト数も最小バイト数も決まっていないとする。
Cで標準入力で最大バイト数決まってないってどうすればいいんだ
>データは最大バイト数も最小バイト数も決まっていないとする。
Cで標準入力で最大バイト数決まってないってどうすればいいんだ
24: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 15:24:55.56 ID:3ZWwhtSzM.net
>>21
std::stringみたいに1024くらい最初にバッファ取っておいて
足りなかったら2倍確保してコピー。
確保できなかったらexceptionみたいにpanicさせるとか。
std::stringみたいに1024くらい最初にバッファ取っておいて
足りなかったら2倍確保してコピー。
確保できなかったらexceptionみたいにpanicさせるとか。
22: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 15:20:03.52 ID:8R6/NX9Ka.net
動くものを作るの自体は難しくなさそうだけど、最も効率がいい方法ってこと?
23: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 15:22:11.27 ID:QlC5DcF/0.net
たぶん効率が良いほうが点数高いです
30: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 15:44:18.59 ID:XfseTZR4K.net
>>23
あとは「getsを使ったアホは減点」とかだな
あとは「getsを使ったアホは減点」とかだな
25: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 15:26:04.43 ID:XfseTZR4K.net
厳密に言えば解なしかもだけど
たぶん問題つくったやつがアホなだけだと思う
まさか「仕様の抜けをチェックして適切な問い合わせをする課題」じゃないだろうし
たぶん問題つくったやつがアホなだけだと思う
まさか「仕様の抜けをチェックして適切な問い合わせをする課題」じゃないだろうし
27: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 15:34:30.93 ID:OTJHg8cv0.net
この程度でIT土方なっても地獄に日々だろ
さっさと辞めろ
さっさと辞めろ
26: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 15:31:59.73 ID:3ZWwhtSzM.net
1行目はgetcだかで1文字ずつ文字を取ってデータ終わり文字列バッファにコピー
11文字目以降は破棄
2行目は無限長で。
てか>>3で文字列取得する処理はどこ行った
11文字目以降は破棄
2行目は無限長で。
てか>>3で文字列取得する処理はどこ行った
28: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 15:34:53.24 ID:XfseTZR4K.net
関数シグネチャは指定されてるみたいだから
その範囲でつくるしかないんじゃないかな
データ終端はやっぱりstatic変数を
11byteくらいとって格納するしかないか
その範囲でつくるしかないんじゃないかな
データ終端はやっぱりstatic変数を
11byteくらいとって格納するしかないか
31: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 15:48:20.27 ID:QlC5DcF/0.net
なんか分かったような気がして実際に作ると混乱する…
32: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 15:54:39.10 ID:6ntb1lUJ0.net
ダメだ入力がうまくいかん、文字列苦手だ
一旦ギブ
一旦ギブ
33: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 15:55:42.28 ID:VLZ/zVPm0.net
FORループ使って無駄に重くしようぜ
34: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 16:03:03.95 ID:QlC5DcF/0.net
ぐぬぬ
37: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 16:13:08.51 ID:8R6/NX9Ka.net
次は「n+終端文字数-前回余った文字数」読み取るだけだから問題ないんじゃない。
38: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 16:13:39.15 ID:m433tyYpr.net
>>3のプログラム例が予想以上に意味不明だった
標準入力ほったらかしに見えるんだけどいいの?
標準入力ほったらかしに見えるんだけどいいの?
39: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 16:15:11.78 ID:QlC5DcF/0.net
理解が追いつかねえ
35: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 16:04:53.03 ID:8R6/NX9Ka.net
n+終端文字列分読みだして終端文字列あるか検索するだけじゃないの?
余った文字列はstaticな変数にでも入れておいて。
余った文字列はstaticな変数にでも入れておいて。
40: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 16:16:48.45 ID:RuW1zcm60.net
>>35
終端の後ろを読み込んではいけないって条件を付けると、それじゃ出来なくなる
わざわざ終端を付けるって事は、終端に後ろにまた他のデータがあるって事だろうし
終端の後ろを読み込んではいけないって条件を付けると、それじゃ出来なくなる
わざわざ終端を付けるって事は、終端に後ろにまた他のデータがあるって事だろうし
43: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 16:22:58.65 ID:8R6/NX9Ka.net
>>40
余分な文字を一切読み取ってはダメって条件付けられると、
例題で言うなら
12345ABCDF
みたいな文字列読めないから無理くない?
余分な文字を一切読み取ってはダメって条件付けられると、
例題で言うなら
12345ABCDF
みたいな文字列読めないから無理くない?
45: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 16:24:29.80 ID:RuW1zcm60.net
>>43
読めるだろ
読めるだろ
47: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 16:26:43.78 ID:8R6/NX9Ka.net
>>45
>>43の場合はFまで読まないと判別できないけど、
本来読み取るべきはAまでだから余分な文字「BCDEF」読まずに判断できなくない?
>>43の場合はFまで読まないと判別できないけど、
本来読み取るべきはAまでだから余分な文字「BCDEF」読まずに判断できなくない?
48: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 16:29:18.16 ID:RuW1zcm60.net
>>47
終端文字列はABCDEなんだから
ABCDFは読み込んで構わないだろ
終端文字列はABCDEなんだから
ABCDFは読み込んで構わないだろ
46: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 16:25:43.95 ID:RuW1zcm60.net
終端文字列にNULが含まれてる場合もちゃんと考慮しろよ
44: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 16:23:52.30 ID:QlC5DcF/0.net
もう問題が悪いのかな…
49: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 16:33:50.45 ID:RuW1zcm60.net
わざわざ最小3バイトって条件付けてるくせに、
1行目が3バイト未満だったときの対処が書かれてないのは問題が良くない
まあ例題ではvoidだけど実際はintにして、エラーは-1でも返すべきなんだろう
データにNULが含まれていた時を考慮して正常時の復帰値は読み込んだバイト数にすべきなんだろう
1行目が3バイト未満だったときの対処が書かれてないのは問題が良くない
まあ例題ではvoidだけど実際はintにして、エラーは-1でも返すべきなんだろう
データにNULが含まれていた時を考慮して正常時の復帰値は読み込んだバイト数にすべきなんだろう
50: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 16:34:47.92 ID:+pXFvgcn0.net
ヌル文字とかいう老害仕様
51: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 16:39:27.34 ID:RuW1zcm60.net
終端文字列はstaticな配列にでも格納しとかなきゃならないから
この関数はスレッドセーフでなくなってしまうのも気になる
学生に解かせる課題にスレッドセーフでない関数を作らせるのはいかがなものか
この関数はスレッドセーフでなくなってしまうのも気になる
学生に解かせる課題にスレッドセーフでない関数を作らせるのはいかがなものか
52: 以下、\(^o^)/でVIPがお送りします 2014/12/22(月) 16:49:11.83 ID:QlC5DcF/0.net
とりあえず出題者と話してみます…
引用元 http://viper.2ch.sc/test/read.cgi/news4vip/1419224424/
コメント
コメント一覧 (1)
コメントする