2

我正在研究一些在将文本进一步发送到程序之前过滤文本的代码(此代码删除除所有字母数字字符和下划线之外的所有内容),代码本身完美运行,除了我找不到存储输出的方法其中的一部分用于程序的其他部分,如果我不得不猜测,这可能涉及将标准输出从 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;
}
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 回答