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


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

【初心者歓迎】C/C++室 Ver.59【環境依存OK】



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



654 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 03:33:47 ]
あああ、すいません

if(num[i] == num[j]){のところで
変数num[i]とnum[j]が違っていても処理をしてしまう原因

を知りたかったのです
ソースは特に変えてないと思うのですが
どこかおかしいでしょうか

655 名前:645 [2008/04/14(月) 03:36:18 ]
違った。P<false> -> P<true> が嫌だった。です。


656 名前:650 mailto:sage [2008/04/14(月) 03:39:19 ]
またもすいません
>>654は>.650です・・・

657 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 09:29:44 ]
>>650
i が 0 から 3 をとりながら動き、
そのループのなかで j が 0 から 3 をとりながら動くんですよね。
すると, i = j ならば, num[i] == num[j] となって、system("pause") がかならず
実行されることになります。

なさりたいことは、こんなのでしょうか?
(確認環境 WindowsXP, 処理系 cygwin(gcc 3.4.4)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6239.txt

658 名前:650 mailto:sage [2008/04/14(月) 11:06:42 ]
>>657
まさにそんな感じです
ありがとうございます

659 名前:657 mailto:sage [2008/04/14(月) 11:24:42 ]
>>658
バグってました。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6240.txt

660 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 14:51:59 ]
set<Class> a, b;とあってaからbに含まれていない要素を取り除きたいときに
remove_ifなんかのアルゴリズムでスマートに書けますか?

661 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 15:06:05 ]
operator^

662 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 16:59:15 ]
>>660

#include <iostream>
#include <algorithm>
#include <set>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>

int main() {
  namespace bll=boost::lambda;
  std::set<int> a,b;
  a.insert(1);
  a.insert(2);
  a.insert(3);
  b.insert(2);
  b.insert(3);

  std::remove_copy_if(a.begin(), a.end(),
                      std::ostream_iterator<int>(std::cout),
                      bll::bind(std::find<std::set<int>::iterator, int>,
                                b.begin(),
                                b.end(),
                                bll::_1 ) == b.end());

  return EXIT_SUCCESS;
}

uu-n...



663 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 17:49:02 ]
huninnkidearuboost::egg::lazywotukattemitayo

#include <iostream>
#include <algorithm>
#include <set>
#include <boost/lambda/lambda.hpp>
#include <boost/egg/lazy.hpp>
#include <boost/lambda/bind.hpp>
#include <boost/assign/std/set.hpp>
struct base {
  template< class Myself, class Arg0, class Arg1, class Arg2 >
  struct apply {
    typedef Arg0 type; };
  template< class Result, class Arg0, class Arg1, class Arg2 >
  Result call(Arg0 begin, Arg1 end, Arg2 value) const {
    return std::find(begin, end, value);
  } };
typedef boost::egg::function<base> op;
boost::egg::result_of_lazy<op>::type
  const find_lazy = BOOST_EGG_LAZY({});
int main() {
  namespace bll=boost::lambda;
  using boost::assign::operator+=;
  std::set<int> a,b;
  a+=1,2,3; b+=2,3;
  std::remove_copy_if(a.begin(), a.end(),
                      std::ostream_iterator<int>(std::cout),
                      find_lazy(b.begin(), b.end(), bll::_1) == b.end());
}

uuu-nnn...

664 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 17:52:02 ]
p_stade乙

665 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 18:01:20 ]
>>660
a = bはだめなの?
だめだから聞いているんだろうけど。

666 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 18:06:40 ]
>>665
横からだけど

a : 10,20,30,40
b : 20,50

この場合多分望む結果は

a : 20

だろうけど、>>665だと間違った結果を返す。

667 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 18:37:09 ]
vectorやらlistで

vector<int>の要素が

1 2 (空白) 3 4 (空白) 
の様に途中に空白をいれることはできるのでしょうか?


668 名前:デフォルトの名無しさん [2008/04/14(月) 18:46:45 ]
VC++でPC情報を取得するPGを作成します。
プロジェクト作成は(Win32とか)どれを選ぶのが
適当でしょうか?

669 名前:デフォルトの名無しさん [2008/04/14(月) 19:40:07 ]
>>668
Linux+GCCがお勧め

670 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 19:42:55 ]
.exe が出来るならどれでもいいと思う。

671 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 20:02:18 ]
とあるクラスに関数を一個追加しようとしたところ

.hファイルに関数の本体を書き出すと正常にコンパイルが通るのに
.cppファイルに書き出すと
C2039 'foo' : 'hoge' のメンバではありません。

となってしまいます
これはどういう事でしょうか・・・

672 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 20:05:04 ]
ソースを見せれ



673 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 20:10:42 ]
      f´'´      ノ     ヽ  l  、 \!
       l /  / //  ,.ィ´   !', ト、 ヽ. ヽ
.      レ′, / //_,..イ// ,|   l |lλぃ  い. ',
      } / { ‐7Ζ_∠!イ 〃  /リ,}/┤!」l 小 !
     ノ i| 八//'゛ -`l 〃 /ノ'´  j ! |l/| iイ/
     ヽ|l//イ ャ''Tェ歹''`y゙/  'ヾ歹¨リ`イ!ノ//   まさか、ロリコンじゃないわね・・・
      ) 〃A ``''''"´ '^ r;   `'''"´/クK/
      Y/ !トヘ. ////    //// /.ィi| ;|
        |i( l|`Ti\,___  '⌒)   ,∠lj_|iリ
       {い ヾLr┤:.:.:.:.`:、__,,..イ;:.::.:./勹_」!
       ``ァ;=<´ ̄``ヽ:ヽ;‐-/;/``Tr-.、



674 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 20:13:11 ]
>>671
>.cppファイルに
しか書いてなかったとかいうオチだったら、君が泣くまで殴るのをやめない。

675 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 20:14:56 ]
>>672
仕事でのデータが含まれてるのでちょっとソースは公開できないですorz

>>674
インテリセンスで関数宣言を確認してから中身を書いてるのでそれはないと思います

676 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 20:25:23 ]
問題が再現するコードを作ってそれを貼ればいいじゃん。

677 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 20:27:54 ]
テンプレート関数だったらお前の殴る

678 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 20:39:03 ]
hppで解決♪

679 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 20:58:05 ]
リビルドし直したら通った・・・
これはどういう事??

680 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 21:22:35 ]
VCではよくあること

681 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 21:53:28 ]
そしてインテリセンスが延々と更新されないことも

682 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 21:58:23 ]
インテリセンスが嘘つくのも。



683 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 21:58:43 ]
>>667
vector<int>に整数以外のものは入れられません。
仮に、負値を例外として扱ってよいなら空白の代わりに-1を入れておくと言う手もなくはありませんが、
boost::optionalを使ってみてはどうでしょう。

684 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:18:55 ]
メモリが断片化している場合、ポインタに+1した場合はきちんと断片先に飛んでくれるんですか?
それとも型サイズ分だけ強引にアドレスが+1されるんですか?


685 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:21:43 ]
断片化?
どういう状況を言ってるんだ?

686 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:22:45 ]
vectorではなくdequeの実装を言っているのかもw

687 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:25:23 ]
deque のことなら、イテレータに +1 したら断片化先に飛ぶけどポインタは当然無理だな。

688 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:26:51 ]
>>685
1つのデータがメモリに書き込まれる時は必ず連番のアドレスに配置されるんですか?

689 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:27:37 ]
>>688
少なくとも仮想アドレスは連番だが。
物理アドレスは知らんがな。

690 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:28:51 ]
STLとかboostみたいので
RECTとかSIZEを包んだクラスはありますか?

691 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:31:41 ]
CRectならMFCにあるけどな…

692 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:31:51 ]
WTLにも



693 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:32:58 ]
>>689
つまり&で表示されるアドレスは仮想でWindowsが物理メモリの番地とリンクを取って隙間に埋め込んでるから考えなくていいってことですね
ありがとうございました。

694 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:38:39 ]
>>693
それでいいのか?
本当にそれでいいのか?w

695 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:43:16 ]
C++でプロパティー的なものを表現する場合
getとsetはつけたほうがいいの?それともOR?

696 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 23:04:14 ]
漢は黙ってpublic:

697 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 23:06:53 ]
それだとブレークポイントはれないじゃん・・・。

698 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 23:15:52 ]
__declspec(property(get=getHoge, put=setHoge))
int Hoge;


699 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 23:43:26 ]
winsockのsock関数の第一引数にAF_BTHを指定すると、AF_BTHが定義されていないとエラーがでます。
winsock2.hはインクルードしてるんですが、ほかになにかインクルードしなければいけないんでしょうか?

700 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 23:55:47 ]
grepかけたらws2bth.hででてきたけど。

701 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:24:06 ]
std::list<int> iListの参照を作りたいのですがこの場合

std::list<int>& refList = iList;
で良いのでしょうか?

702 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:31:23 ]
アドレスを比べてみたらいいと思うよ



703 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:39:51 ]
>>702
簡単に試してみたけど
大丈夫そうな気がしました

704 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:54:33 ]
C言語での構造体の初期化について質問です。

typedef struct Foo_tag{
 int a;
 int b;
 int c;
} Foo;

というような構造体があったときに、

Foo foo = {0};

という初期化を行っているコードをたまに見かけますが、これは何を行っているのでしょうか?
一応MinGW環境で同様のコードを書いてテストしてみましたが、{0} で初期化した構造体はゼロクリアされており、
初期化しなかった構造体にはゴミが入っていました。
ということは、上記のコードは構造体をゼロクリアするという認識でいいのでしょうか?

それと、標準Cの規格でこういう初期化は許されていますか?
構造体のゼロクリア処理は memset() などを利用して行っているコードが多いことを考えると、標準規格ではなさそうな
気がするんですが…。

705 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 01:00:36 ]
メンバを途中まで初期化すると
残りは0で初期化されるってヤツだったと思う。
標準Cでどうなのかは知らん。

706 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 01:04:31 ]
Foo foo = {1};でa=1,b=0,c=0になるのが保証されてる

707 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 01:12:58 ]
>>705-706
ありがとうございます。途中まで初期化ということができるんですね。
それなら構造体をゼロクリアするときはこれを使うと楽かもしれないですね。
(先頭にネストした構造体があったりするとどうなるのかよくわからないので、汎用ではないのかもしれないですが)

708 名前:デフォルトの名無しさん [2008/04/15(火) 01:13:32 ]
>>704
初期化時のみOK

709 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 01:18:46 ]
memsetだとパディングも初期化できるのが利点だったかな
普通の使い方で初期化する必要があるのかどうかは知らないが

710 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 01:36:11 ]
>>709
ものすごく行儀の悪いコーディングだけど構造体同士を memcmp で比較できる

711 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 01:58:11 ]
>>710
あくまで「普通の使い方」の話な
キャストしたりすればいろいろ問題も出てくるだろうよ

712 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 01:59:59 ]
>>704
標準規格です。



713 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 02:01:05 ]
>>704
昔のコンパイラだと 0 で初期化されません

714 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 03:28:46 ]
>>660
template<typename Class>
void assign_intersection(std::set<Class>& a, std::set<Class> const& b)
{
  std::set<Class> result;
  std::set_intersection(a.begin(), a.end(), b.begin(), b.end()
    , std::inserter(result, result.end()));
  a.swap(result);
}

715 名前:デフォルトの名無しさん [2008/04/15(火) 08:00:05 ]
*
**
***
****
...
みたいな感じの出力を得たいのですが、***を出力する部分は、なにか特別な書き方とかないですか?
関数を作るしかないですか?


716 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 08:06:55 ]
>>715
MFCならスタティックテキストの表示を*に変えるという機能(設定)があったり。
自前でもキー入力(KeyDownとか)→別の変数に格納→その文字数だけ*を表示で簡単に出来る。

717 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 10:30:07 ]
// * を n 個出力する関数
void f(int n){
for(int i = 0; i < n; i++) std::cout << '*';
std::cout << std::endl;
}

void g(int n){
for(int i = 0; i < n; i++) f(i);
}

718 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 14:19:49 ]
std::string s(length, '*');
std::cout << s << '\n';

719 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 20:41:31 ]
#include <iostream>
#include <iomanip>

int main()
{
    for (int i = 0; i < 10; ++i)
        std::cout << std::setw(i) << std::setfill('*') << "" << std::endl;
}
ところでC++でいいんだよね?

720 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 22:13:39 ]
C言語ならこんなもんか
void f1()
{
    int n, i;
    for(n = 1; n <= 10; n ++) {
        for(i = 0; i < n; i ++) putchar('*');
        putchar('\n');
    }
}

void f2()
{
    int n;
    for(n = 1; n <= 10; n ++)
        puts("**********" + 10 - n);
}

void f3()
{
    int n;
    for(n = 1; n <= 10; n ++)
        printf("%.*s\n", n, "**********");
}

721 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 00:27:56 ]
printfの書式でもっと簡単にできなかったっけ?
イメージ>>720のf3()が近いんだけど・・・使う機会が少ないとすぐにわすれちゃうな・・・

722 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 00:38:10 ]
>puts("**********" + 10 - n);

このやり方はじめて見た。目から鱗やわ



723 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 00:42:59 ]
>>722
その鱗はつけておいた方がいいw

724 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 02:36:32 ]
課題でc++のbasic_stringの様なstringクラスを作っています。
その中でstr >> coutはクラス内でoperator>>を用意することで
動くようになったのですが、cout << strは「二項演算子<<はクラス
strをサポートしていません」と言われてしまいます。
これはどのようにしたらcout << strが出来るようになるのでしょうか?

またお恥ずかしながら、str = "aaa"は作れたのですが、str ="aaa"+"bbb"は
作ることが出来ませんでした。これはどの様に作ったらいいのでしょうか?

どうかよろしくお願いします。

725 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 02:46:22 ]
なんか物凄く基本的なことのような気がしますが
C言語で、unsigned char から signed char に代入、もしくはその逆を行った場合、ビットバターンは常に保存されますか?

726 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 02:55:53 ]
>>725
いいえ。

727 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 03:01:40 ]
>>724
上:strをサポートする二項演算子を書く。
basic_ostream<foobar> & operator <<(basic_ostream<foobar> & os, str & st);
下:無理。

728 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 03:02:50 ]
>>726
ありがとうございます。そうなると char* を適宜 unsigned char* にキャストしたりしないとダメですね。
一部バイナリが混ざってるファイルを読む必要があったので助かりました。

729 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 03:58:13 ]
>>728
K&R2 A6.1 (promotion) を参照してください。
char/unsigned char は先に int に変換される点、特に要注意です。

730 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 04:09:29 ]
>>729 promotion は関係ないだろ。

731 名前:729 mailto:sage [2008/04/16(水) 04:57:02 ]
>>730
char c = 0x81;
if (c == 0x81)
printf("=\n");
else
printf("!=\n");

の結果って、あれ〜?!ってなりませんか?

732 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 11:52:33 ]
>>731
char が符号付きで最大値が 127 の場合の話なら、
char c = 0x81 の時点で未定義動作。
問題は promotion じゃなくてオーバーフロー。



733 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 12:09:54 ]
0x81がunsigned charじゃないじゃん

734 名前:732 mailto:sage [2008/04/16(水) 12:20:21 ]
> char c = 0x81 の時点で未定義動作。
ごめん。間違い。オーバーフローが問題なのは違いないけど、型変換での
オーバーフローは未定義動作じゃなくて、値が処理系定義のものになるか、
処理系定義のシグナルが発生する、らしい。

735 名前:729 mailto:sage [2008/04/16(水) 20:42:23 ]
>>732 >>734
了解いたしました。

char buffer[N];
...
while (fgets(buffer, N, fp) != NULL) {
if (buffer[i] == ...)
...
}
などと安易に考えると、(たとえば漢字コードの判別など)わからなくなってしまった経験がありました。
unsigned char buffer[N];
とすれば、問題ないのではありますが。

ご指摘ありがとうございました。 またひとつ賢くなりました。

736 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 20:49:18 ]
>>735
漢字コードをいろいろ扱うなら >>735 だと unicode の時に困るんじゃなかろうか?
(文字列に \0 が含まれる可能性が高いから)

737 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 21:04:51 ]
C++では以下のように大丈夫そうですけど。
signed char と unsigned char は同表現と書いている
読み間違い?

A char, a signed char, and an unsigned char occupy the same amount of storage and have the same alignment
requirements (3.9); that is, they have the same object representation. For character types, all bits of
the object representation participate in the value representation. For unsigned character types, all possible
bit patterns of the value representation represent numbers.

738 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 01:47:49 ]
>>737
読みには自信ないのですが、
単に、
1) char/unsigned char/signed char のいずれも同じ量のメモリを占有する。
2) char/unsigned char/signed char のアラインメント(配置位置、偶数バイトを先頭にする、アドレスが4 の倍数のバイトを先頭にする、など)が同一である。
という意味でのみ same としているだけではないでしょうか。
char / unsigned char / signed char の表現がまったく同一であるというのは不可能と思われますのですが。

後続の文では、
char のすべてのビットが数をあらわしているわけではない(単に関係するといっているだけ、符号の場合もありますよ、ということでしょうか。)
unsigned char はすべてのビットが数を構成する要素となる。
と読めます。


739 名前:デフォルトの名無しさん [2008/04/17(木) 07:16:24 ]
template <class T>
template <typename T>
この2つはちがいがありますか?


740 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 07:21:28 ]
違いは無い

741 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 08:20:34 ]
class じゃないのも使うよなーとか思っていつも typename にする俺

742 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 08:26:55 ]
俺もある時期から、typenameが手癖になってしまった。
別にこだわるわけじゃないから、もし仮にclassと書いてくれと職場で言われたら
二つ返事でclassにするけど。



743 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 08:30:00 ]
なんとなく表明の意味で使い分けるかも。
その後しっかり中でstatic_assertするけどね。

744 名前:デフォルトの名無しさん [2008/04/17(木) 10:03:28 ]
クラス配列をnewで生成する時に呼ばれるコンストラクタを指定できますか?

745 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 10:06:12 ]
残念ながらできない。

746 名前:デフォルトの名無しさん [2008/04/17(木) 11:04:06 ]
strcatを使わずに
char src[ ] = "seikima"
char dest[4] = "tsu"
という文字列を結合し、表示させることが出来ますか?

747 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 11:10:49 ]
>>746
char result[11];
sprintf(result, "%s%s", src, dest);
printf("%s\n", result);

748 名前:746 [2008/04/17(木) 11:14:54 ]
746です。言葉足らずでした。
sprintfも使わずにforを使って何とか表示させたいのですが
いかがでしょうか?

749 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 11:25:24 ]
>>747じゃないがやっつけ仕事なんで間違ってたらごめん


char ret[11];

for(int i =0 ; i < strlen(src) ; i++)
{
ret[i]= src[i];
}
for(int i=0 ; i <strlen(dest) ; i++)
{
ret[i+strlen(src)}=dest[i];
}
printf("%s\n",ret);

750 名前:746 [2008/04/17(木) 11:27:20 ]
>>749

>>746に書いたんですが、今回string.hに関するものは使っちゃいけないので
strlenも使用出来ない感じです。

751 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 11:34:17 ]
>>746にそんなこと書いてNEEEEEEEwwwww

strlen()をsizeof()-1に変えれば同じ動作だ

752 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 11:37:17 ]
>>746
条件後だししすぎ

char result[20], *p, *q;

for(p=result,q=src;*p++=*q++;);
for(p--,q=dest;*p++=*q++;);



753 名前:746 [2008/04/17(木) 11:46:22 ]
重ね重ね、申し訳ないです。

ポインタも使ってはいけないようです。

754 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 11:50:24 ]
宿題かよ。消えろ。






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

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

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