[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 01/29 10:31 / Filesize : 249 KB / Number-of Response : 964
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

はきだめC/C++下級者の質問箱 2



1 名前:デフォルトの名無しさん [2006/08/22(火) 09:21:31 ]
はきだめのスレへようこそ

ここは、C/C++に挫折し、それにもかかわらず、C/C++やらなければならない者達がたむろするスレです。
なお、質問する人は回答はあまり期待しないでください。


前スレ:はきだめC/C++下級者の質問箱
pc8.2ch.net/test/read.cgi/tech/1124256027/

520 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 18:42:34 ]

 漢字かな雑じりの string を小文字にしたいんですが,以下の方法では「認.」 が化けてしまいます.

std::string str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ AB確認.";//期待する変換: abcdefghijklmnopqrstuvwxyz AB確認.
std::ctype<char> c;
c.tolower( str.begin(), str.end() );//「認.」 が化ける


 以下の方法で上手くいっているように思いますが問題ありますでしょうか?
また,もっと簡単な方法があれば御教示下さい.

for( int i=0; i < str.size(); i++)
{
  if ( _ismbblead(str[i]) )
  {
    i++;
    continue;
  }
  str[i] = tolower(str[i]);
}



521 名前:デフォルトの名無しさん [2007/07/15(日) 21:09:48 ]
for(i=0; N; i++){
・・・



このときの繰り返し条件Nってどういう意味になりますか?

522 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 21:11:49 ]
Nのところが0以外なら繰り返してください、っていう意味!!!!

523 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 21:17:25 ]
共有メモリに(キューデータ構造)を構築したいのですが
どうしたらいいのでしょうか?

524 名前:デフォルトの名無しさん [2007/07/15(日) 21:30:25 ]
>>523
まずは、パソコンの電源を入れる

525 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 23:02:52 ]
>>520
wchar_t 使えば?

526 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 00:43:59 ]
wchar_t じゃ解決にならんと思うのだが。

527 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 00:58:23 ]
>>526
何か問題あるの?

528 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 01:47:49 ]
>>520 で済む事なのに
わざわざ文字コード変換とかするとか、
いくらなんでも無駄すぎる。



529 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 01:53:54 ]
>>521
Nがtrue(真)なら繰り返す
Nがfalse(偽)なら打ち切る
そして true とは 0 以外の値を持つ事であり、false とは 0 であることである。


530 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 02:18:50 ]
>>528
お前の言うことは分かるが、もし527に対して言っているのなら、
答えになっていないぞ。
無駄かどうかはともかく、wchar_tでも解決できるのだから。

個人的にはwchar_tを使うのはありだと思う。
確かにこの例では_ismbbleadの1つで済むが、そうでない(wchar_tにしたほうが手っ取り早い)場合は結構ある。
それ以外にも利点や必要があってwchar_tを使っていると、
522程度でもwchar_tを使えばいいと思うようになってくる。
今時変換のコストなんて微々たるもの。
なんなら元データをwchar_tと同じ文字コードにすればいい。(完全に脱線したが)

ただ、std::stringとstd::wstringとの間に簡単な変換方法が無いのは痛い。

ところで、wchar_t使う方法では、やり方次第で
全角英字まで小文字になりそうな気もする。

531 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 02:22:10 ]
L"" で初期化すれば変換なんて要らないんじゃないの?

532 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 02:29:58 ]
wchar_t は2バイトだったり4バイトだったりするからな・・・

533 名前:520 mailto:sage [2007/07/16(月) 14:26:31 ]

皆さん御解答有難う御座います.
wchar_t も検討しましたが,問題なさそうなので >>520 で行きたいと思います.
有難う御座いました.

534 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 01:28:47 ]
int x;
std::cin >> x;

ってすると、xがint型であってもキーボードからWWWって文字列を入れたりすることができちゃうじゃないですか
これって防げませんか?


535 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 01:56:16 ]
>>534
入力されたらどうするかを自分で決めて好きに実装すればいい。
最悪は1文字ずつ処理。

536 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 21:54:41 ]
その方法がわかりません・・・・・

537 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 22:57:53 ]
一旦、文字列として読み込めばいい。

538 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 00:55:38 ]
配列と、forとかの反復処理を勉強してください。



539 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 03:37:06 ]
わざわざ再発明させなくてもいんじゃね?っていつも思う。
てか悪い。C++は良く分からなかった。

#include <stdio.h>
main() {
   int a;
   do {
      printf("値>");
      scanf("%d",&a);
      while (getchar() != '\n') { }
   } while((a < 1) || (a > 9999));
   return 0;
}

540 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 04:07:14 ]
>>534
fail したら clear してから string へ読み捨てれば

541 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 22:37:43 ]
じゃあC++における標準入力って何でも文字列で読み込まないとエラー処理できないわけですか…


542 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 22:52:48 ]
>>541
Cでも同じじゃね?
ってか、入力されるのは実際文字列であってたまたま数字だったら変換してくれてるってことでしょ。
Variantみたいな型が無い時点で>540のようにするしかないかと。

543 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 01:04:15 ]
>>541
どうしてもっていうならテンキー以外のキーボードをつなげるな

544 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 06:29:53 ]
人はそれを電卓と呼ぶ。

545 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 06:57:01 ]
cin.ignore 使えば

546 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 19:06:59 ]
ttp://www.kk19.net/new_microsoft_keyboard.jpg

地球上のキーボードが全てこれだったら、
ちっとはマシな世の中になってたかもな

547 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 07:58:57 ]
>>546
せめてリターンキーは必要だろう
CtrlとALTときたら普通はSHIFT
指五本あるのになんで三キーしかないのか


548 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 19:36:32 ]
同時に全部押すことにしか使わないのさw



549 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 01:49:49 ]
最近は使わないんだろうな。
NTのログインにも使わなくなったからな・・・

550 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 15:26:31 ]
参照っていうのは『参照!』ってやった時にしかアクティブにならないのがファイナルアンサーですか?

551 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 21:52:37 ]
ニッポンランゲージでOK

552 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 14:01:40 ]
構造体を関数で参照した時に
その関数では使わない構造体の中の変数があった時
関数に構造体を渡した時に、
構造体の中の変数が多いとそれだけ何か、処理が増えてしまうのか
それとも「参照!」ってやったときだけ処理されるのかが知りたいです(´・ω・`)


553 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 14:08:55 ]
参照渡しなら問題ない。

554 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 00:41:42 ]
>>552
もう少し質問を簡潔にまとめてくれると助かる。
構造体を値渡しすれば関数内で利用されてない変数の有無に関わらずコピーの処理が発生する。
よって、構造体が大きくなればなるほど処理も大きくなる。
これを避けたいのであれば>>553のようにするか、ポインタ渡しすればいい。

555 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 10:51:52 ]
>>554
日本語の拙い>552に合わせて変な用語を使わなくていいよ。
構造体のメンバを変数と言われるとどうにも理解しにくいから。
#メンバ変数と言おうと要素と言おうとその辺は構わんが。

ついでに注釈。問題の関数がインライン展開されるような代物なら、
参照渡しでなくともコピーが発生しない可能性はある。
従って、迷ったときは値渡しで充分だ。

556 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 12:05:33 ]
謝罪を賠償しるニダ

557 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 02:10:49 ]
>>553
ありがとう

>>554
なるほど

>>555
インラインっていうのを始めて知りました
それだとコピーされなかったりするんですね
でもとりあえず参照使っときます

558 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 02:28:35 ]
恥ずかしい



559 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 11:49:12 ]
迷ったらconst参照でいいよ。

560 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 00:02:25 ]
typedef struct __blockData{
uint32_t index;
uint32_t block_size;
struct __blockData *next;
}BlockData;


struct __blockData *next;この部分なんとか
BlockData *next;って書きたいんですけど

なんとかならないっすか?

561 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 00:05:15 ]
なんとかならないっすね

562 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 00:14:43 ]
ええーーーやだやだ
ちょっとちょっとそんなぁ

まってくださいよ>>561さん
俺がどんな思いで12分過ごしたと思うのですか?

563 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 00:35:10 ]
typedefはあくまで再定義
最後の行のBlockData;までいったところで初めて再定義完了になるから
自分を指す場合ちゃんとstruct __blockDataと明示しないと不可。

564 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 00:39:25 ]
そうなのか

やけ酒するしかないな...
高校生だけどまぁいいかw

565 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 00:48:04 ]
通報しました

566 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 00:55:34 ]
>>560
これでいいんじゃね?

typedef struct __blockData BlockData;

struct __blockData{
uint32_t index;
uint32_t block_size;
BlockData *next;
}BlockData;

567 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 01:04:43 ]
>>566
それはCでもC++でも無理だろ。書き忘れたがC++コンパイラなら
struct BlockData;と前方宣言する事でコンパイルをパス出来た。

568 名前:566 mailto:sage [2007/09/25(火) 01:08:52 ]
あ、最後に余計な BlockData がついてた。ごめん。

>>567
最後の余計なやつだけ修正すればコンパイルできるよ。
C++ なら前方宣言も要らなくて struct BlockData { BlockData* ... ってできるよ。



569 名前:デフォルトの名無しさん [2007/09/25(火) 01:13:22 ]
うへー

570 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 01:17:52 ]
void *next;

では・・・・だめですかそうですか。

571 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 01:18:50 ]
uint_ptrと
void *

の使いわけってどうすればいいの?

572 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 01:26:04 ]
大文字じゃなくて小文字なの?あんま見覚えが無い・・・

UINT_PTRはunsigned intだった気もするけどよく覚えていない

573 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 04:52:14 ]
a |= b

ってどんな意味なんでしょうか?


574 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 08:13:47 ]
>>573
a = a | b

575 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 09:29:14 ]
>>572
UINT_PTRはC99のuintptr_t相当。

576 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 23:18:36 ]
>>571
int と voidの使い分けは?


577 名前:デフォルトの名無しさん [2007/10/18(木) 01:34:33 ]
あげあげ

578 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 02:00:25 ]
>>571

void* はどんな型のポインタが渡されるか分らない場合に使う。
(キャストしないと参照先を見れない)
int* はポインタが指し示した先がint型であるとされる。

char a = 'a'
int* p1 = (int*)&a;
void* p2 = &a;

となっているとき*p1はエラーにならんが*p2はエラーになる。
なので関数内で使用時のキャストし忘れが防げる…のではなかったかな?



579 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 08:17:44 ]


580 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 08:32:36 ]
すみません。書きかけを送信してしまいました。
ハード、ソフト共に同じはずなのに、別のPCではマルチプロセスのミューテックスによる排他制御が上手く働いていないみたいなのですが、
原因として何を疑えばいいのでしょうか。もう全然判んないです。

581 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 09:30:23 ]
>>580
最小限のコードを晒す

582 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 08:27:30 ]
『上手く働いていないみたい』といいたい気持ちはわかるが
それでは他人にはわかってもらえませんよ。

583 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 08:30:39 ]
>>580
今まで偶然動いていただけで同期処理に漏れがあったかだな

584 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 09:13:13 ]
>>580
うちでは上手く働いている
実力不足じゃね?

585 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 11:06:18 ]
今まで低速シングルCPUで動いていたが
高速なPCに変えたらおかしくなったとか
クアッドコアに変えたらおかしくなったとか
そういうマルチスレッドプログラムなんかもあるんだろうな。

586 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 13:03:24 ]
機種依存ソフトなんだろう。

587 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 16:34:20 ]
方角が悪い。

588 名前: ◆NpJ1Hez.TM mailto:sage [2007/10/24(水) 04:48:27 ]

YES!!



589 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 17:57:28 ]
関数ポインタテーブルとswitch-case文
ってどっちが高速なの?

どっちも個数は100

590 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 21:02:40 ]
ポインタ

591 名前:要は、実測あるのみ mailto:sage [2007/10/29(月) 12:07:48 ]
>>589
一概には言えないが、テーブルの方が遅いことは多分ないと思う。
恐らくは、大差ないと思うが。

592 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 01:12:14 ]
テーブルが遅くなるケースも充分考えられるよ。もちろん、メモリアクセスの速度を除いて。

単純な例だと、2つの値(分岐先)が交互に来る場合。
こういった規則的なものなら、分岐予測はほぼ必ず成功する(ものが多い)。
最近のプロセッサなら、もっと複雑なパターンでも予測出来るものもある。
一方、テーブルジャンプだと、(普通は)前回と同じ分岐をすると仮定されるので
必ず分岐ミスとなる(ものもある)。

当然、分岐予測ミスのペナルティの大きさも含めて、プロセッサによる差が大きいけどね。

593 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 19:20:28 ]
>>589
なぜ「switch-case文より関数ポインタテーブルのが高速」だと考えるのか?

条件分岐が排除できるから

では、なぜ条件分岐が排除できると高速になるのか?

実際に実行するコードがかなり前から分かっていれば、
CPUでコードプリフェッチやアウトオブオーダー実行などの最適化を行えるから

関数ポインタテーブルを使えば実行するコードがかなり前に分かるのか?

条件にもよるが、おそらくはノー
多くの場合、直前にならないと関数ポインタの値が分からない

つまり、関数ポインタテーブルを使っても、少なくともx86の場合は速くなりません。
条件分岐なら二者択一でとりあえずどちらかの分岐コードを実行するという手もありますが、
関数ポインタだとそういうこともできないので、多くの場合ストールします。
実際に実行するコードアドレスがかなり前から分かっていて、
そのアドレスを特定のレジスタ(か不変なことが保証されているメモリ)
に保存しておくことができればストールは回避できます。

594 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 15:25:53 ]
じゃあif-elseでもいいのか


595 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 19:17:04 ]
選択肢が100個もあれば、速度は分布によっていろいろだろうな。

596 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 23:16:36 ]
Cカス
Cカス

うるさい人を黙らせる方法教えてください

なるべく合法的な方法がいいです

597 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 23:30:14 ]
RubyもPythonもphpもUnixも
全部Cで書かれてるんだぞ。
Cはすごいんだぞ。

598 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 23:35:23 ]
>>596
相手がしゃべった瞬間に大声を出すとか



599 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 07:11:07 ]
>>596
お前の耳を取ってしまえ

600 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 00:23:13 ]
C言語でC++の
テンプレート見たいに記述したいんだけど

どうしたらいいものじゃろうか?のぅ?

601 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 01:03:26 ]
プリプロセッサを駆使する。

602 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 20:52:15 ]
でどうやってかくの?

603 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 09:48:29 ]
## を駆使する

604 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 06:34:15 ]
C++にtemplateが実装されるまでの過程を知ってりゃ話は早いんだがな。
generic.h

605 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 22:49:30 ]
そうだ、cfrontを使おう(w

606 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 09:23:34 ]
template<typename T>T*hoge(T*t){return t;}
でNULLを受け取れるようにするにはどうすればいいんでしょう...

607 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 11:57:46 ]
(void*)NULLみたいに、型付きのNULLを渡す。
でないと、どの型のNULLがほしいか誰にも判らないじゃん。

608 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 13:28:57 ]
NULLに型など付けれません
ばかじゃねーのw



609 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 23:02:23 ]
>>606
hoge<int>(0)

610 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:18:25 ]
hashのkeyを

char key[32]で定義しmemcpyを
必要に応じて複数回コールする方法と


struct key_data{
_u32 data;
....
};

みたいな感じで構造体を定義して
_u8 *にキャストして使うのは
どっちが速い?それとも同じ?


611 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 03:44:57 ]
なんともいえない。
実測。

612 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:12:37 ]
>>608
いくらここが掃き溜めだと言っても限度が・・・

613 名前:デフォルトの名無しさん [2008/01/20(日) 21:00:38 ]
コンパイルしたときのエラーに

storage size of 's' isn't known

とでてきてしまいます。
これはどこを直せばいいんでしょうか?
storageって何ですか?

614 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 10:32:07 ]
>>613
辞書くらい引け。

恐らく、int s[]みたいな変数宣言でもしているんだろ。

615 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 12:37:58 ]

offsetof(s,m)マクロみたいなので
他クラスのprotectedメンバのオフセットを
取得したいんですがどうすればよいですか?



616 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 12:41:48 ]
>>615
それができたらprotectedの意味がないとは思わないかね?

617 名前:デフォルトの名無しさん [2008/01/22(火) 23:31:19 ]
コンパイルをした時に
converting to ‘int’ from ‘float’

って表示されたらどこが悪いんでしょうか?

618 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 23:39:07 ]
>>617
floatからintに暗黙の変換を行っている。
明示的にキャストを書けば警告は出ない。



619 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 23:44:05 ]
>>617
>って表示されたらどこが悪いんでしょうか?
頭……というのはさておき、floatからintではオーバフローが起きる恐れがあるので
気の利いたコンパイラは警告を出すってこと。
# 勿論、出さないようにもできる。

620 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 00:29:52 ]
>>618-619
お陰様で解決出来ました、ありがとうございます。







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<249KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef