重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

よろしくお願いいたします。
C言語勉強中のものです。
質問内容は下記です。

英単語ソートプログラムの制作中です。
仕様:
テキストファイルから文読み込み
アルバベット降順ソート
1ページを32として、indexのようなものを生成する。

英単語登録済みのバッファとテキストファイルの比較を行い
テキストファイルの英単語に該当するなら、出力に渡さないというプログラムを書きたいのですが
テキストファイルとバッファの比較の仕方がわからず困っています。

テキストファイルは下記の様な単純な形式です。
例)block.txt
a
an
the

私が今書いてるソースの登録部だけですが提示させて頂きます。

int
regist(char *wordp,int npage )
{
wlist_t *p;
wlist_t *treep;

plist_t *plp;

int cmp;/* 文字列比較 */

if( wtop == (wlist_t *)NULL ) {
p = alloc_wlist( wordp, npage );
if( !p ) {
return( -1 );
}
wtop = p;
return( 0 );
}else{
treep = wtop;
while( 1 ) {
cmp = strcmp( wordp, treep->wordp );
if( compare < 0) {
if( treep->leftp != NULL ) {
treep = treep->leftp;
}else {
p = alloc_wlist( wordp, npage );
if( !p ) {
return( -1 );
}
treep->leftp = p;
p->up = treep;
return( 0 );
}
}else if( cmp > 0) {
/* wordp is greater than regist word */
if( treep->rightp != NULL ) {
treep = treep->rightp;
}else {
p = alloc_wlist( wordp, npage );
if( !p ) {
return( -1 );
}
treep->rightp = p;
p->up = treep;
return( 0 );
}
}else{
if( treep->lastp->pnum == npage ) {
}else {
plp = alloc_plist( npage );
if( !plp ) {
return( -1 );
}
treep->lastp->nextp = plp;
treep->lastp = plp;
}
free( wordp );
return( 0 );
}

}
return(0);
}
}

おかしい所が多々あると思いますが、とりあえず完成を目指したいので
質問部分のコードの改変、サンプル提示などありましたらよろしくお願いいたします。

A 回答 (1件)

構造体の内容が不明だったり、動作が不明な関数があったり…とかありますが……。


まあ、気になったところを。

>if( compare < 0) {

compareとはなにものです?
まぁ、直前でstrcmp()の結果を受けているcmpのコトかと思われますが……。

>free( wordp );

このルート以外ではfree()されませんが、問題ない…んでしょうか?
alloc_wlist()内でfree()されているんですかね?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!