【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.18655

文字列の両端
投稿者---K.S(2004/12/13 09:49:12)


検索文字列を編集していますが、1単語の両端に「*」をつける方法がわからず、掲示板に投稿しました。
入力した検索文字列が「日本」の場合に、sprintf( keybuf, "*%s*", "日本" )にすると「*日本*」になりますが、「日本 政治」の場合は「*日本 and 政治*」となりますので、「*日本* and *政治*」にはどんな方法がございましょうか?ご教授宜しくお願い申し上げます。

main(){

   char c_buf[256];

      :
   addstr( "日本 政治","and" c_buf ) ;
      :

}

char addstr( const char *in, const char *add, char *out )
{
   const char *p ;
   do{
      if( *in == ' ' ) {
         *out++ = ' ' ;
         for( p = add ; *p ; *out++ = *p++ ) ;
      }

   } while( *out++ = *in++ ) ;

}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:文字列の両端 18666 monkey 2004/12/13 12:55:52


No.18666

Re:文字列の両端
投稿者---monkey(2004/12/13 12:55:52)


区切りは半角空白であることが前提です:

void addstr( const char* in, const char* add, char* out )
{
    for( ; *in == ' '; in++ ){
        ;
    }
    while( *in != '\0' ){
        *out++ = '*';
        for( ; *in != ' ' && *in !='\0'; *out++ = *in++ ){
            ;
        }
        *out++ = '*';

        for( ; *in == ' ' && *in != '\0'; in++ ){
            ;
        }
        if( *in != '\0' ){
            const char* p;
            *out++ = ' ';
            for( p = add; *p ; *out++ = *p++ ){
                ;
            }
            *out++ = ' ';
        }
    }
    *out = '\0';
}

#include <stdio.h>

int main()
{
    char c_buf[256];
    addstr( "日本 政治", "and", c_buf );
    printf( "%s\n", c_buf );
    return 0;
}



この投稿にコメントする

削除パスワード

No.18667

Re:文字列の両端
投稿者---K.S(2004/12/13 13:31:47)


うまく表示することが出来ました。
monkeyさん、本当にありがとうございました。
知識不足で大変勉強になりました。

><pre>区切りは半角空白であることが前提です:

void addstr( const char* in, const char* add, char* out )
{
for( ; *in == ' '; in++ ){
;
}
while( *in != '\0' ){
*out++ = '*';
for( ; *in != ' ' && *in !='\0'; *out++ = *in++ ){
;
}
*out++ = '*';

for( ; *in == ' ' && *in != '\0'; in++ ){
;
}
if( *in != '\0' ){
const char* p;
*out++ = ' ';
for( p = add; *p ; *out++ = *p++ ){
;
}
*out++ = ' ';
}
}
*out = '\0';
}

#include <stdio.h>

int main()
{
char c_buf[256];
addstr( "日本 政治", "and", c_buf );
printf( "%s\n", c_buf );
return 0;
}</pre>


この投稿にコメントする

削除パスワード

No.18668

Re:文字列の両端
投稿者---monkey(2004/12/13 13:49:26)


一部訂正します(無駄な演算の削除)。

訂正前:
        for( ; *in == ' ' && *in != '\0'; in++ ){
            ;
        }
        if( *in != '\0' ){
            ...

訂正後:
        for( ; *in == ' '; in++ ){
            ;
        }
        if( *in != '\0' ){
            ...



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧