2

プログラムに送信される前にテキストをフィルタリングするコードに取り組んでいます(このコードはすべての英数字とアンダースコアを除くすべてを削除します)、出力を保存する方法が見つからないという事実を除いて、コード自体は完全に機能しますプログラムの他の部分で使用するために、これはおそらくputcharからのstdoutを変数に保存することを含みますが、誰かが私を正しい方向に向けることができれば、オンラインでそうするための多くの情報を見つけることができませんこのために私は本当に感謝します、ありがとう!

#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void) {
    int i;
    char *p;
    char stg[] = "hello";
        for (p = &stg[0]; *p != '\0'; p++) {
           if (isalnum(*p) || *p == '_') {
           putchar (*p);
           }
        }
        putchar ('\n');
    return 0;
}
4

2 に答える 2

5

フィルタリングを行う際に使用する「必要性」がわからない場合もありますが、以下に示すように、フィルタリング後に必要なputchar()場合でも、入力を出力array of charsにフィルタリングして使用できます。

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main(void) {
    int i;
    char *p;
    char stg[] = "hel123*^_lo";
    char output[200] = {0x00};
    int index = 0;


    p = stg;
    while( *p )
    {
        if (isalnum(*p) || *p == '_')
        {
            output[index++] = (char)putchar(*p);
        }       
        p++;
    }
    putchar('\n');
    printf("[%s]\n", output);
    return 0;
}

出力:

hel123_lo
[hel123_lo]

編集:

また、文字列を表示せずに文字列を配列にフィルタリングする場合は、次のputchar()ようにします。

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main(void) {
    int i;
    char *p;
    char stg[] = "hel123*^_lo";
    char output[200] = {0x00};
    int index = 0;


    p = stg;
    while( *p )
    {
        if (isalnum(*p) || *p == '_')
        {
            output[index++] = *p;
        }       
        p++;
    }

    printf("[%s]\n", output);
    return 0;
}

そして、フィルタリングされたテキストの出力で正確に何をしようとしていますか?

于 2012-05-11T23:20:38.123 に答える
3

putchar ---int putchar( int ch );成功した場合は作成した文字を返し、失敗した場合はEOFを返します。

スカラー変数、配列要素、または構造体のフィールドのいずれであっても、int変数を宣言し、書き込んだ内容を保存することを妨げるものは何もありません。戻り値はintであり、charではないことに注意してください。

あなたが書いたものに基づいて、あなたはおそらくあなたが保存するすべての出力を管理するためにいくつかのコードを書かなければならないでしょう。言い換えれば、私があなたの質問を正しく解釈しているなら、あなたはあなたが書いたものを変数に保存する以上のことをしているでしょう。おそらく、コードのどこでputcharを実行したか、そしておそらく時間さえも言いたいでしょう。ただ推測します。

于 2012-05-11T23:19:59.867 に答える