2012-05-11 12 views
2

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

#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; 
} 
+2

単に条件を満たす文字を保存しないのはなぜですか?あなたは何を出力したいのですか? – PALEN

答えて

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] 

EDIT:

そして、あなたはちょうど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; 
} 

フィルタ処理されたtexの出力と正確に何をしようとしていますかt?

+0

完璧な、ちょうど私が(配列に情報を出力する方法について)探していたものでしたが、私は単純にその時にそれを表示せずにコードの出力を保存したい場合は(何も印刷されません画面に表示されず、代わりに配列に保存されます)どうやってそのようなことをするのですか? Cに比較的新しいので、まだすべてのことには具体的ではない、これらの明白な質問、おかげで私の謝罪! – lacrosse1991

+0

出力の目的のために、これは残りのプログラムとサーバーを使用するクライアントの間で行われます。ほとんどの場合、サーバーが悪意のある入力を送信するのを防ぐための安全メカニズムです – lacrosse1991

+0

うれしいことです。私は 'putchar()'を使わずに文字列を配列にフィルタリングする方法を示すために答えを編集しました。私が助けてくれたら、私の答えを受け入れて、それ以上の質問があれば教えてください。 – Chimera

3

のputchar - int putchar(int ch);は - EOFの故障であれば、成功した場合は、書いた文字を返します。

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

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

関連する問題