トップページ⇒tech
1001コメント301KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/02/20(水) 12:33:41
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.48【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1202141921/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0669デフォルトの名無しさん2008/02/25(月) 13:07:20
簡略化すると関数の引数で、" "型と、char[]型と、char*型を区別したいって事です
0670デフォルトの名無しさん2008/02/25(月) 13:17:48
>>668
constつけるだけでは無理です

#include <iostream>
using namespace std;

class cl{
char *str;
public:
cl(char const *x) { cout<<"文字列は定数です\n"; }
cl(char *x){ cout<<"文字列は可変長です\n"; }
};

main(){
cl str="xxx"; //定数で初期化
char ch[]="yyy"; str=ch; //固定配列の代入
str="zzz"; //定数の代入
getchar();
}
0671デフォルトの名無しさん2008/02/25(月) 13:19:34
すまん、そもそも char ch[] = "yyy"は固定長でも書き換え可能な配列なんだが
それを定数として扱ってはいけない理由を教えてくれ。
0672デフォルトの名無しさん2008/02/25(月) 13:22:36
あ、聞き方が変だ。

char ch[] = "yyy"は書き換え可能なんだから可変長と同一視すればいいし
const char ch[] = "zzz"は書き換え不可能なんだから定数と同一視すればいいのでは?
0673デフォルトの名無しさん2008/02/25(月) 13:22:41
可変長文字列と {定数文字列、固定長文字列} ( ← 一緒でいいです)
を分類する方法教えてください
あと、すでにメモリが確保してあればそれを解放する方法教えてください
0674デフォルトの名無しさん2008/02/25(月) 13:23:36
長さも書き換えられないといけません
0675デフォルトの名無しさん2008/02/25(月) 13:24:19
こいつ日本人なのかなぁ
0676デフォルトの名無しさん2008/02/25(月) 13:26:00
>あと、すでにメモリが確保してあればそれを解放する方法教えてください
これは簡単。コンストラクト時にメモリを確保したらフラグをセットしておいて、代入オペレータでそれをチェックすればいい。
勿論、代入オペレータも2種類用意して必要ならフラグをセットするのは当然として。
そのフラグはいずれにしてもデストラクト時に必要にナル死ね。
0677デフォルトの名無しさん2008/02/25(月) 13:28:05
あー、ローカルな配列だとコンストラクト時にフラグが立ったら問題か。
ここは一つ、char配列は渡さないと言う運用でw
0678デフォルトの名無しさん2008/02/25(月) 13:28:42
で、この馬鹿はなんで目的を説明できないんだろうなぁ。>675ってことなんだろうか。
0679デフォルトの名無しさん2008/02/25(月) 13:43:23
目的は、参照渡しのできるstringを作りたいんです
現存するやつは値渡しです
0680デフォルトの名無しさん2008/02/25(月) 13:45:33
いやだから、それを(態々)作る目的を聞いているのだが。
0681デフォルトの名無しさん2008/02/25(月) 13:46:27
チャットじゃないんだから要旨をまとめてから書き込め。
0682デフォルトの名無しさん2008/02/25(月) 13:46:53
>>676
クラスの確保と同時に代入されてしまうと、フラグが設定されていないので動作不明になりませんか?
0683デフォルトの名無しさん2008/02/25(月) 13:50:39
>>681
可変長文字列は参照渡しにして、それ以外は値渡しにして、新たな文字列が渡されたら以前のを解放したいんです
0684デフォルトの名無しさん2008/02/25(月) 13:52:58
>>683
>680
0685デフォルトの名無しさん2008/02/25(月) 13:53:25
伸びてると思ったら、また例の日本語が不自由なヤツが現れたのか
0686デフォルトの名無しさん2008/02/25(月) 13:56:58
何をしたいかと言うと

(バイナリ) 文字列 str , p , qに対して

replace(str, p, q)  strの全文でpをqに置換する

という関数を作りたいんです
0687デフォルトの名無しさん2008/02/25(月) 14:03:08
>>665

それぞれの型の応じて関数を振り分ければいいのか?

template<size_t N>
void g(const char (&a)[N]) {
cout << typeid(a).name() << endl;
}

template<size_t N>
void g(char (&a)[N]) {
cout << typeid(a).name() << endl;
}

void g(char *&p)
{
cout << typeid(p).name() << endl;
}

template<typename T>
void f(T& t)
{
g(t);
}
0688デフォルトの名無しさん2008/02/25(月) 14:03:31
//テスト
int main()
{
f("abc");
char a[5];
f(a);
char *p;
f(p);
}
0689デフォルトの名無しさん2008/02/25(月) 14:08:07
ぜんぶcです・・・・

#include <iostream>
#include<typeinfo>
using namespace std;

template<size_t N> void g(const char (&a)[N]) { cout << "a" << endl;}

template<size_t N> void g(char (&a)[N]) { cout << "b" << endl; }

void g(char *&p){ cout << "c" << endl; }

template<typename T> void f(T& t) { g(t); }


int main() {
f("abc");
char a[5]; f(a);
char *p; f(p);
}
0690デフォルトの名無しさん2008/02/25(月) 14:12:45
>>689
そりゃコンパイラがだめなんだろうな。
g++ 4.2.3だとa b cになる。
0691デフォルトの名無しさん2008/02/25(月) 14:12:57
>>686
これでいいのか?
#include <string>
#include <iostream>
using namespace std;
void replace(string& str, string p, string q)
{
int i = str.find(p);
while (i >= 0) {
str.replace(i, p.length(), q);
i = str.find(p, i + q.length());
}
}
int main()
{
string str = "abcdabcd";
replace(str, "bc", "BC");
cout << str << endl;
}
0692デフォルトの名無しさん2008/02/25(月) 14:17:34
>>686
俺だったら、次のどっちかにする。だから、673のようなことをしたくなる理由が理解できない。
1. strは全く書き換えず、置換後の文字列は新しく確保したメモリに書き込んで戻り値に返す。
2. strは書き換えできるという前提でstrを書き換える。(書き換えできない
文字列をstrに渡したければ、書き換え可能な場所へコピーを作ってそれを渡す)
0693デフォルトの名無しさん2008/02/25(月) 14:25:43
STR str="hogehogehogehogehoge"
replace(str, "geho", "(^_^)"); や、

int N=300*1024*1024;
char *ch=new char [N];
for(int n=0;n<N;n++)ch[n]=n; //巨大なバイナリ配列
STR str(ch,N);
replace(str, "geho", "(^_^)");
がしたいんです
0694デフォルトの名無しさん2008/02/25(月) 14:29:10
巨大な配列を扱おうとすると、元のデータをコピーしたり、返却時に新規確保すると、
もとのデータと併せて領域が2倍必要になりますしコピー時間がかかります
>>691 バリナリデータも扱いたいです
0695デフォルトの名無しさん2008/02/25(月) 14:32:38
>>693
できるぞ
>>694
バイナリデータも問題ない
#include <string>
#include <iostream>
using namespace std;
void replace(string& str, string p, string q)
{
int i = str.find(p);
while (i >= 0) {
str.replace(i, p.length(), q);
i = str.find(p, i + q.length());
}
}
int main()
{
string str="hogehogehogehogehoge";
replace(str, "geho", "(^_^)");
cout << str << endl;

int N=300*1024*1024;
char *ch=new char [N];
for(int n=0;n<N;n++)ch[n]=n; //巨大なバイナリ配列
string str2(ch,N);
replace(str2, "geho", "(^_^)");
cout << str2 << endl;
}
0696デフォルトの名無しさん2008/02/25(月) 14:32:39
C++
開発環境 CentOS
コンパイラ g++
関数書き出しプログラムが機能せず。
どうしてでしょうか。
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
#define buffer_size 1000
using namespace std;
int main(int argc,char *argv[]){
string buffer;
int count=0;
char *p;
ifstream fin(argv[1]);
if(!fin)return 0;
while(fin>>buffer){
while(count!=1){
if((p=strchr(buffer.c_str(),'{'))!=NULL){
count++;
cout<<buffer;
}
}
while(count!=0){
if((p=strchr(buffer.c_str(),'{'))!=NULL)count++;
else if((p=strchr(buffer.c_str(),'}'))!=NULL)count--;
}
}
fin.close();
return 0;
}
0697デフォルトの名無しさん2008/02/25(月) 14:35:18
>>694
置換前より後の文字列のほうが長い場合、
単純にその場で書き換えていくと、1ヶ所置換が行われる度に
置換部分以降をずらしたり、時にメモリの伸張をしたりで時間がかかる。
最近のOSはメモリの扱いも上手になっているし、
そもそもPCのメモリ搭載量も大きくなっているから、
新しいメモリに書き込んでいくも選択肢として捨てたものではない。
0698デフォルトの名無しさん2008/02/25(月) 14:38:10
>>689
VC++ 2008でしか試してない。オーバーロード解決は規格に従って
いるんだが。コンパイラがテンプレート規則に対応していないのかね。
0699デフォルトの名無しさん2008/02/25(月) 14:48:28
>>695 >>697
stringにコピーするのが一番なんですかね?
関数で作業領域を確保しようとするので 初めの3倍必要になります
コピー無しなら2倍ですみます 300メガとかだと動作に支障出ないですかね・・

>>698
うちのコンパイラだと全滅しました MinGWの最新版 、DMC、VC++6.0、bcc5.5.1
0700デフォルトの名無しさん2008/02/25(月) 14:51:46
>>692
2番の方向で行こうとしているところだったんです 
定数なら書き換え可能な領域を確保しようとしたら、その判別がコンパイラでできないのでここで質問していたんです
0701デフォルトの名無しさん2008/02/25(月) 14:51:46
>>699
new char[]せずに最初からstringの中にデータを作ればコピーを減らせる

int N=300*1024*1024;
string str2;
str2.resize(N);
for(int n=0;n<N;n++)str2[n]=n; //巨大なバイナリ配列
replace(str2, "geho", "(^_^)");
0702デフォルトの名無しさん2008/02/25(月) 14:57:26
わかりました 
stringに直接挿入する方向で行こうと思います
巨大な入力があるのはファイルからなので、自作して直接stringに入れるようにします
0703デフォルトの名無しさん2008/02/25(月) 15:00:35
>>699
>コピー無しなら2倍ですみます 300メガとかだと動作に支障出ないですかね・・
stringの操作云々よりも、その情報量をどう扱うかと言うアルゴリズムの方が問題になりそうな希ガス。
少なくとも、GiBオーダ未満のメモリくらい今時普通に扱えるよ。

>>696
どう、機能していないのさ。
0704デフォルトの名無しさん2008/02/25(月) 15:01:19
ちゃんと目的を説明すれば、妥当な回答が手早く得られると言う好例だな。
07056922008/02/25(月) 15:03:09
>>700
俺の場合、その判別は自分でやる。
必要なら自分でメモリ確保してmemcpyか何かでコピーしてから置換する関数へ渡すと言うこと。
メモリ確保その他をstringに任せているという点が違うけど、695案と同系統のアイデア。
0706デフォルトの名無しさん2008/02/25(月) 15:04:31
>>696
関数突入を探すwhileの条件がcount != 1だから、関数突入後に中括弧を見つけるとcountが2になって脱出できなくなる罠。
0707デフォルトの名無しさん2008/02/25(月) 15:10:50
>>696
>706に加えて、内側のwhileは両方ともifでいいだろよ。
つまり、最初のwhileは if (count == 0)で、次のwhileはif (count > 0)。
んで、fin >> bufferだと単語単位でしか入力できないから工夫が必要。
# 行単位入力すればいいのかな? 仕様がわからんからなんとも言えんが。
0708デフォルトの名無しさん2008/02/25(月) 15:13:01
初めはC言語のみで、作成しようとして最後まで作ったのですが
ポインタのポインタとかやっているうちに動かない場合があることに気づき修復不可能になりました
そしてC++で参照や型判定して作ろうとしたらこれも上手くいきませんでした
簡明なプログラムが大事ですね
0709デフォルトの名無しさん2008/02/25(月) 15:20:04
ここできいたのを参考に変換関数を作ってたのですが、そしたら全体がややこしくなり回復無理になりました

#define strconv(q, p) _memconv(&q, &p, strlen(p))
#define memconv(q, p, n) _memconv(&q, &p, n)
#define strconstconv(q, p) _strconstconv(&q, p)

_memconv(strdata *q, char **p, int n){
char **chend =(char **)malloc(sizeof(char **));
q->start=p; *chend=&(*p)[n]; q->end = &(*chend);}
0710デフォルトの名無しさん2008/02/25(月) 15:52:07
>>708,709
無理して難しく書いても、あとあとメンテナンスやデバッグのことを考えると、シンプルに書いた方がいい場合が多い
メモリを何MBか余計に使ったり、実行時間が何分か伸びたところで、なんだというんだ
ややこしいコードは書くのもデバッグも何日もかかる
それだけの価値があればやってもいいが、たいていは割に合わない
0711デフォルトの名無しさん2008/02/25(月) 17:21:33
やさしいC++買って来た。
一日でマスターするのは無理なのかなぁ・・・
0712デフォルトの名無しさん2008/02/25(月) 17:26:04
一週間くらいは覚悟しないといかんね
0713デフォルトの名無しさん2008/02/25(月) 17:39:36
一年ぐらいは(ry
とか言いたいけど最低10年とかいう意見もあるし
やね某が何年か前に提唱した半年ぐらいで勘弁しておいてやろう
0714デフォルトの名無しさん2008/02/25(月) 18:04:09
質問ですが、stringの+は、\0を特別視しませんよね?

"aa\0aa" + "bbbbb"はどのコンパイラでも、
"aa\0aabbbbb"ですよね?
0715デフォルトの名無しさん2008/02/25(月) 18:38:41
いつからCは+演算子で文字連結できるようになったんだ
0716デフォルトの名無しさん2008/02/25(月) 18:39:19
stringと書いてあるだろうがアホ
0717デフォルトの名無しさん2008/02/25(月) 18:43:10
>>716
>>714はC++でもNGだろ。C文字列同士だぞ。
0718デフォルトの名無しさん2008/02/25(月) 18:45:36
そこは中身がそうなっているstringインスタンスだと解釈してやろうぜ。
0719デフォルトの名無しさん2008/02/25(月) 18:48:48
質問者はそういう中身のstringを造ろうとしてそこでつまりそうだが
0720デフォルトの名無しさん2008/02/25(月) 19:21:16
>>718
アイアイ
0721デフォルトの名無しさん2008/02/25(月) 19:30:23
std::auto_ptrって、ブロックを出ると自動的に開放されるポインタですよね?
これって、AUTO変数と比べてより便利な点ってあるのでしょうか?
0722デフォルトの名無しさん2008/02/25(月) 19:36:53
×ブロックを出ると自動的に開放
○std::auto_ptrが破棄されたときインスタンスも自動的に開放
0723デフォルトの名無しさん2008/02/25(月) 19:37:01
>>721
・スタックに置くには適さない巨大なデータも置ける
・最初はNULLにしておいて必要になってからnewできる
・ブロックを出るまで待たなくても好きなタイミングで削除できる
・releaseで手放せばブロックを出ても削除しないことも出来る
0724デフォルトの名無しさん2008/02/25(月) 19:39:10
関数の戻り値にも使えるはず。
0725デフォルトの名無しさん2008/02/25(月) 19:41:51
using namespace std;
string func1() {
string s = "Hello";
return s;
}
void func2(string s) {
cout << s << endl;
}
int main() {
func2(func1());
}

この渡し方って解放されなかったり破壊されたりしますか?
処理系によりけりですか?
0726デフォルトの名無しさん2008/02/25(月) 19:43:39
>>725
しません。
どの処理系でも平気。
0727デフォルトの名無しさん2008/02/25(月) 19:59:12
>>722-724
ありがとうです。

ところで、testは適当なクラスとして、
int main()
{
std::auto_ptr<test> tp(new test);
tp.release();
return 0;
}
とすると、メモリリークが検出されてしまうのですが、tp.release()をしないようにすると
大丈夫でした。これってrelease()の使い方が間違ってますか?
あと、最初にauto_ptr<test>だけ宣言しておいて、途中でnew testする方法もわかりません。
もうちょっとだけ教えてくださいな。
0728デフォルトの名無しさん2008/02/25(月) 20:05:08
releaseは、以後、自分でメモリ管理するからauto_ptrはdeleteするなというもの。
0729デフォルトの名無しさん2008/02/25(月) 20:14:08
>>728
最初は、
std::auto_ptr<test> tp(new test);
tp.release();
test* tp2 = tp.get();
delete tp2;
としていたのですが、以下のようにしなければならないということですね。
std::auto_ptr<test> tp(new test);
delete tp.release();
ありがとうございました。
0730デフォルトの名無しさん2008/02/25(月) 20:27:13
>>729
tp.reset();
0731デフォルトの名無しさん2008/02/25(月) 20:44:23
resetはVC6のauto_ptrには無いとか言い出すぜきっと。
0732デフォルトの名無しさん2008/02/25(月) 20:52:38
resetもしないでデストラクタに任せればいい場面にまで
729のようなことをしていないか不安。
0733デフォルトの名無しさん2008/02/25(月) 20:58:49
設計について色々調べていると(デザインパターン等々)これ無駄じゃね?みたいな部分に多々遭遇します

例えばコンストラクタとデストラクタで確保&解放を行う為に全体をそれに合わせたり
それの為にメソッドやクラスを用意したり等々

確かに見通しもよくなりますし、わかりやすくなるとは思うのですが、
それらを犠牲にすれば短く出来たりオーバーヘッドを減らせたり出来るんじゃないか?と考えてしまいます

つまりコード全体の見易さ、転じてメンテナンスが容易になるなどのメリットと
速度を犠牲にするというデメリットがあると思います
とはいえ後者は今時気にするほどでもなく、詳しくないのですがここを気にするのは組み込み系と呼ばれる分野くらいなのかなとも思います

実際はやはり見易さ等を気にした手法(なんていうんだろう?)を用いて設計を行うべきなんでしょうか?
うまく表現できなく、長くなってしまってすみません
0734デフォルトの名無しさん2008/02/25(月) 21:01:16
Visual Studioって 何処にヘッダファイル置けば
0735デフォルトの名無しさん2008/02/25(月) 21:04:18
Visual Studioって 何処にヘッダファイル置けば
フルパス指定しなくて読み込めるんですか?
C:\Program Files\Microsoft Visual Studio 8\VC\include
でOK?
0736デフォルトの名無しさん2008/02/25(月) 21:06:29
>>735
ソースファイルと同じ場所なら
#include"hoge.h"
でおk
0737デフォルトの名無しさん2008/02/25(月) 21:09:06
>>733
大丈夫
君よりコンパイラのほうが賢いから
0738デフォルトの名無しさん2008/02/25(月) 21:09:18
速度犠牲とか偉そうに言うやつほど、ダメなプログラマ
0739デフォルトの名無しさん2008/02/25(月) 21:10:01
普通の初心者質問には答えないんだなぁ
0740デフォルトの名無しさん2008/02/25(月) 21:11:48
本当に遅くなることばかりじゃないしな。
std::sort が qsort より概して速くなる、というみたいに、
インライン化されると問題ないことも多い。
0741デフォルトの名無しさん2008/02/25(月) 21:14:36
>>738
色んな分野があるって前提で考えてるんだろう?
お前は組み込み系とビジネスソフト開発が同じだと思っているのか?
それにプログラミングしてればみんなプログラマって思考が気持ち悪い
お前見たいのは答える側に回るな
0742デフォルトの名無しさん2008/02/25(月) 21:14:59
プログラマではないです、ただいろんな分野があってそれに合ったプログラミングがあることくらいはわかっています

でもやっぱり速度は気にしちゃいけないところですか、無駄だと思ってしまうところから直す必要がありそうですね
コンパイラの最適化というのも知らない分野ですし、当分は見通しの良いプログラムを目指してみようと思います
0743デフォルトの名無しさん2008/02/25(月) 21:18:54
まず動くプログラムを書く。
そして遅ければ改善する。
この順だな。
07446962008/02/25(月) 21:19:34
696です。
先ほどのプログラムを訂正したら、
一行ほどしか出力されませんでした。
どこが間違っているのでしょうか。

ttp://www.borujoa.org/upload/source/upload17009.txt
0745デフォルトの名無しさん2008/02/25(月) 21:26:58
これをちょっと弄って横長から縦長にしたいのですが、
いまいち組み方がわかりません。環境はLinuxでコンパイラはgccです。
#includeは省略
#define max 50
using namespace std;
class hist{
private:
string buffer;
int count;
int mat[max],i,j;
public:
int func(char *argv[]);};
int hist::func(char *argv[]){
ifstream fin(argv[1]);
if(!fin)return 0;
for(i=0;i<max;i++)mat[i]=0;
while(fin>>buffer){
count=strlen(buffer.c_str());
for(i=1;i<max;i++){
if(i==count)mat[i]=mat[i]+1; }
}
for(i=1;i<max;i++){
cout<<i;
for(j=0;j<mat[i];j++)cout<<"*";
cout<<'\n'; }
return 0;}
int main(int argc,char *argv[]){
hist hoge;
hoge.func(argv);
return 0;
}
07466962008/02/25(月) 21:28:43
すみません、あげるの忘れてました。
どなたか教えてください。
0747デフォルトの名無しさん2008/02/25(月) 21:32:49
GNU global使えていう話じゃなくて?
07487442008/02/25(月) 21:37:58
>>747
そんなソフトがあったんですかw
ありがとうございます。
しかしそれではコーディングトレーニングにならないので、
ソースコードでよろしくお願いいたします。
どう考えてもイメージがわかないもので質問した次第です。
0749デフォルトの名無しさん2008/02/25(月) 21:44:30
はじめまして

C++でプログラミングをしようと思っているのですが
開発環境等をどうしようか迷っています
将来的には

■ゲームを動かすプログラム(同人やエロゲのアプリ程度)
■補助ソフトやパッチ
■データを暗号化して格納するプログラム

等を作りたいと思っています
何かアドバイスがあればお願いします
0750デフォルトの名無しさん2008/02/25(月) 21:45:47
VC++ でいいっしょ
タダだし
07517442008/02/25(月) 21:48:04
>>749
「C++の勉強したいんだがどの本買って勉強したらいいんですか?」
って聞いてるのと一緒だべ?
0752デフォルトの名無しさん2008/02/25(月) 21:50:19
デザインパターン信者
私にもそんな時期がありました(マジで)
0753デフォルトの名無しさん2008/02/25(月) 21:51:50
80:20の原則があるしな。経験つめばどこがホットスポットなのかが見当つくから、
プロファイルとってそこだけしぼって最適化すればいい。
最初から保守性犠牲にしてまでパフォーマンスチューニングが必要な分野って
限られてると思うよ。
0754デフォルトの名無しさん2008/02/25(月) 21:55:02
>>749
今からC++勉強するよりもおまいは吉里吉里勉強したほうが幸せになれると思う
07557442008/02/25(月) 22:06:01
マイヘッドがクラッシュしてしまいそうなんですが、
エニバディー、ティーチ ミーしてくれませんか?
0756デフォルトの名無しさん2008/02/25(月) 22:16:44
>>752
理解できずに挫折したか。
0757デフォルトの名無しさん2008/02/25(月) 22:16:59
トオルさん帰れよ
0758デフォルトの名無しさん2008/02/25(月) 22:18:58
>>744
関係はないが、とりあえずバッファを buffer_size しか確保してないのに
fgets で filesize 読もうとしてるのはヤバい。
0759デフォルトの名無しさん2008/02/25(月) 22:28:27
>>744
else if(count > 0)
07607442008/02/25(月) 22:29:05
>>758
bufferはstring型でいこうとおもったんですが、
fin>>buffer;でやると、単語読み込みで一行読み込みにはならないし、
fgets(buffer.c_str(),filesize,fin);はコンパイラに怒られるし、
どうしようもないんで駆け込み寺としてここにきました。
たぶんこれも慣れた人なら簡単に直せるんだとは思いますが、
いままでC言語ばっかりやってたもんで、変な癖ついてるんです。
0761デフォルトの名無しさん2008/02/25(月) 22:30:58
getline を知らんのか?
07627442008/02/25(月) 22:32:36
>>761
K&Rにも載ってたんで知ってます。
0763デフォルトの名無しさん2008/02/25(月) 22:32:53
>744
よくわからんが、
一行よむなら、std::.getline( fin, buffer );だが。むろん、finはifstream辺りの必要はある。

初めて"{"が存在する行をみつけたとき、上のifでcount++になって、
下のifも成立してでcount++で2になるんだが、そういうものなのかね?
0764デフォルトの名無しさん2008/02/25(月) 22:33:42
どこのK&Rだ、どこのw
0765デフォルトの名無しさん2008/02/25(月) 22:35:10
>>750
あと必要な物はやる気と根気ですかね?

>>751
"だべ"ってどういう意味ですか?
マルチリンガーじゃないので日本語以外わからないんです、本当にごめんなさい。
0766デフォルトの名無しさん2008/02/25(月) 22:36:48
>>765
キモス
07677442008/02/25(月) 22:43:14
>>759
else ifですか。基本的なところ躓きました。
ありがとうございます。勉強になりました。

>>763
そんな関数があったんですか。
ちょっとgetlineの中をのぞいて使わせてもらいます。

>>764
Cアンサーブックのほうです。
バイブル本とか釣られてやってみたけど、
糞面白んないんで解くのやめました。
0768デフォルトの名無しさん2008/02/25(月) 22:44:52
可変のchar *のバッファ用意したいとき

string buf (n, '\0' );
&buf0]; ← これはchar*のところへ入れられる

と使うと便利だ 自動で消滅するし
■ このスレッドは過去ログ倉庫に格納されています