1 名前:デフォルトの名無しさん [2008/03/30(日) 01:50:26 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.50【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1204124447/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
952 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 16:33:50 ] 一つ目の文字が変わるっていう意味が分からんw
953 名前:948 mailto:sage [2008/04/23(水) 16:41:36 ] struct CTest{ bool operator!=(const CTest& o){ // ... return true; } }; template<typename iter_t> void unique_each(iter_t begin, iter_t end){ for(iter_t back,it=begin; it!=end; ++it){ if(it==begin || *back!=*it){ //処理 back=it; } } } void f(){ CTest v[10]; // v[0] ... unique_each(v,v+sizeof(v)/sizeof(*v)); } (∩゜д゜)アーアーきこえなーい
954 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 16:46:59 ] >>951 今回は文字だから 0 にしときゃ良いけど、 一般に先頭要素または直前のと異なる要素を 判定していくには良い方法だよ。
955 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 16:58:36 ] >>945 の前提条件 nul終端文字列 >>947 の前提条件 文字列 >>950 の前提条件 コピーコンストラクタ operator+ operator!= を持っている型 >>953 の前提条件 operator!= を持っている型
956 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:04:34 ] >>955 もう>>944 とは別世界に行ってるなw
957 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:31:55 ] PHPやperlでprint を使いながらデバッグするような方法をC++でもやりたいのですが、どうすればよいでしょうか?? そういうデバッグの仕方はC++では難しいのでしょうか。
958 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:32:34 ] >>944 ちょっとトリッキー、でもうまいやり方 >>945 一番シンプル >>946 一番重要なレスw >>953 汎用化し杉ワロタw
959 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:44:15 ] >>944 #include <algorithm> #include <string> #include <iostream> #include <functional> int main() { std::wstring src = L"ああいうええお"; src.push_back(0); ::setlocale(LC_ALL, "ja_JP.UTF-8"); for (std::wstring::iterator i = src.begin(); *i != 0; ++i) { i = std::adjacent_find(i, src.end(), std::not_equal_to<wchar_t>()); std::wcout << i-src.begin() << *i << std::endl;; } } 終端一つ加えて条件が逆のadjacent_find >>957 エスパーするとコードを読ませて実行時に一時的な値を見るとかならデバッガ gdbとVC付属のやつとか
960 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:44:31 ] >>944 は、charの取りうる最大値を指していた場合 +1すると、オーバーする。 >>945 は、処理内容次第では、\0がいきなり来た場合にヤバい。 が、あのプログラムの場合strlenの値がループの実行回数だからOK >953は、恐らく>>944 が本当に必要だったものではない可能性が高いw
961 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:47:00 ] >>959 さん なるほどデバッガで変数に格納されてる値を見ることが出来るんですね。 ありがとうございましたm(_ _)m
962 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:51:55 ] >>>944 は、charの取りうる最大値を指していた場合 >+1すると、オーバーする。 するってーと current_c=~str[0]; が適切?
963 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:53:43 ] オーバーフローしても大丈夫だろ。
964 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:55:39 ] あ、一文字目が処理されない
965 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:56:06 ] >>963 実動はともかく、規格的にはアウトだろ
966 名前:959 mailto:sage [2008/04/23(水) 18:12:21 ] リベンジ #include <algorithm> #include <string> #include <iostream> #include <functional> int main() { std::wstring src = L"ああいうええお"; ::setlocale(LC_ALL, "ja_JP.UTF-8"); std::wstring::iterator i = src.begin(); if (!src.empty()) { do { std::wcout << *i << std::distance(src.begin(), i) << std::endl; i = std::adjacent_find(i, src.end(), std::not_equal_to<wchar_t>()); } while(i++ != src.end()); } }
967 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 18:15:31 ] そして通告されるeucJP
968 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 19:01:21 ] vectorの配列を作ろうと思い vector<vector<string> > vecStrDim; vector<string> vecStr; string strTest = "test"; vecStr.push_back(strTest); vecStrDim[0].push_back(vecStr); とやってみました。コンパイルは通るのですが This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information. とでて実行してもデバッグエラーになります vecStrDim[0].push_back(vecStr);が悪いのはわかるのですが、方法が思いつきません どうすればデバッグエラーを対処できるのでしょうか?
969 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 19:06:06 ] >>968 ×vecStrDim[0].push_back(vecStr); ○vecStrDim.push_back(vecStr);
970 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 19:10:40 ] >>969 あわわ……とんでもなく馬鹿なことしてすみません 解決しました
971 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 19:14:36 ] そのコードがコンパイルが通ることが不思議だ…
972 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 19:29:14 ] シングルバイト限定なら、current_cをintか何かにして、charで表現できないデカい値にしとけばいい。
973 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 20:44:51 ] class内で、static付けたものは、配列にしたときコピーは作られないんですよね? すべて同じ物を参照するんですよね
974 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:27:08 ] まあ配列にしなくても1つしか実体が存在しないようになるけどな
975 名前:デフォルトの名無しさん [2008/04/24(木) 00:49:34 ] #include <stdio.h> void main(void) { int a; pirntf("何か入力してください\n\n"); scanf("%d",&a); while(1){ printf("ぐははははははは!!\n\a"); } } この程度しか俺は中なので書けません。プログラマーさん お願いします。
976 名前:デフォルトの名無しさん [2008/04/24(木) 00:50:21 ] ↑MISSりました #include<stdio.h> void main(void) { int a,b,c; printf("数字を入力してください\n"); scanf("%d",&a); printf("数字をまた入力してください\n"); rewind(stdin); scanf("%d",&b); printf("数字をまたまた入力してください\n"); scanf("%d",&c); if(a == b == c) printf("等しいです,\n"); else printf("等しくないです,\n"); } これでa==b==cだったら"等しい"と表示させるように組んでるのに 1、1、1以外の数字は入力してもは全部"等しくないです"になるのは なんででしょうか?
977 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:52:43 ] >>976 a == b == c は、(a == b) == c と解釈される。つまり、使い方が間違っている。 その場合、恐らくa == b && b == c でいいだろう。
978 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:57:13 ] 980あたり、次スレたのむぜ
979 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:59:27 ] >>977 おおwなるほど! ありがとうございました^^
980 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 01:11:37 ] >>990 にパス
981 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 01:14:03 ] >>976 移動前のスレのコメントにもありましたが、 「君が参考にしてるものは信用しないほうがいい」 です。void main(...) はまずい。
982 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 01:17:45 ] void main は g++ でエラーになるしな。 gcc だと警告ですむけど。
983 名前:981 mailto:sage [2008/04/24(木) 01:34:22 ] rewind() も、あるのかわからない.....。stdin に対して rewind() ?
984 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 03:35:46 ] 1〜100までの数字でひとつだけない数字があるのでそれを探すという問題なのですが ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6318.cpp でひとつひとつ探す方法はあるのですが 他の方法で、まず 1〜50までの個数と51〜100までの個数を数えて 1〜50が49個 51〜100が50個で1〜50にあるとして 次は1〜25、26〜50とどんどん減らして 26〜38と39〜50の割り切れないときは13と12にしたりなどして 最後2つの数字にし 48が1個 49が0個で49がない数字とするプログラムを作りたいのですが どなたか例みたいなものを書いていただけないでしょうか?
985 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 03:41:23 ] 数えながら2つのファイル(小さい,大きい)に書き出していけばいいんじゃねの?
986 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 03:42:37 ] どこにあるのかわからないなら、ひとつひとつしらべるのが最善
987 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 03:48:07 ] 問題でこのような方法で作りなさいとあるので作りたいんですがダメでしょうか? #include<stdio.h> #define N 100 int main(void){ int min , max , mid; int count1, count2; int data, i; FILE *fp ここまでの指定はあるのですが、今自力でやってみてるんですが どう二つに分けそれ以降どのように区切っていけばいいのかよくわからないんです
988 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 04:42:58 ] 物凄い無駄な処理だなw 再帰呼び出しを使うのが良いよ
989 名前:988 mailto:sage [2008/04/24(木) 04:46:09 ] ああ、ごめん。数字は順番に並んでるわけじゃないのか
990 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 04:54:26 ] 諦めて全部足して5050から引け
991 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 05:18:22 ] #include <vector> //trueならmidより上、falseなら下 bool hilow(int min, int mid, int max, std::vector<int> src, std::vector<int> dst) { dst.clear(); std::vector<int> hi, low; //中間数超と以下でhi, lowに分ける for(size_t c=min; c <= max; c++) { if(src[c] <= mid) low.push_back(src[c]); else hi.push_back(src[c]); } //個数が規定値か調べて多い方を返す if(hi.size() == max - mid ) { dst.swap(hi); return ture; } dst.swap(low); return false; } 続く
992 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 05:33:54 ] 続き void main() { std::vector<int> num; //ファイルからnumに一度全部読み込む //ここは自分で書けるでしょ? int min, mid, max; min = 1; max = 100; do { (max - min + 1) % 2 ? mid = (max - min + 1) / 2 + 1 : mid = (max - min + 1) / 2; if( hilow(min, mid, max, num, num) ) min = mid + 1; else max = mid; } while(max - min > 2); //完了 }
993 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 05:36:05 ] あー色々間違ってたw bool hilow(int min, int mid, int max, std::vector<int>& src, std::vector<int>& dst) dst.clear(); は無し f(hi.size() == max - mid ) { dst.swap(low); return false; } dst.swap(hi); return true; }
994 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 05:37:10 ] 試してないけどこんな感じで良いと思うよ。 中間の出し方は微妙に間違ってるかもしれんので、自分で検証してね。
995 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 05:56:21 ] exeを逆アセンブルしてソースコードに組み込む定番のやり方教えて下さい
996 名前:デフォルトの名無しさん [2008/04/24(木) 06:00:08 ] ソースコードでよくみかける10Lや1Lってなんのことなんでしょうか? 「1Lとは」などで検索したのですが見つかりません。 環境はC++、BCCです。どなたか回答頂ければ幸いです。
997 名前:デフォルトの名無しさん [2008/04/24(木) 06:09:58 ] >>996 整数のあとにつくLはlong intであることを表す。 10はintの10。10Lはlong intの10。
998 名前:デフォルトの名無しさん [2008/04/24(木) 06:31:33 ] >>997 ありがとうございます! long intをキーワードに検索したら大体わかってきました。 long intを代入するときはLをつけるという解釈であってますか?
999 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 06:39:42 ] 違うよ。整数リテラルそのものにも型があるの。 1 は int型 '1' は char型 1.0 は double型 1L は long型
1000 名前:デフォルトの名無しさん [2008/04/24(木) 06:49:16 ] 重ねてありがとうございます! 詳しい説明でよくわかりました(多分)。 単なる1でも勝手にintにされてるんですね。
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。