我正在研究一些代码,在将文本进一步发送到程序之前对其进行过滤(此代码会删除除了所有字母数字字符和下划线之外的所有代码),代码本身工作正常,除了我无法找到方法存储它的输出以供在程序的其他部分使用,如果我不得不猜测,这可能涉及将stdout从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;
}
答案 0 :(得分: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;
}
你究竟想要对过滤后的文本输出做些什么?
答案 1 :(得分:3)
putchar - int putchar( int ch );
- 如果成功则返回你写的字符,如果失败则返回EOF。
没有什么能阻止你声明一个int变量,无论是标量变量,数组元素还是结构中的字段,并保存你写的内容。请注意,返回值是int,而不是char。
根据您编写的内容,您可能需要编写一些代码来管理您保存的所有输出。换句话说,如果我正确地解释你的问题,你将做的不仅仅是保存你写的变量。您可能想要在代码中的哪个位置执行putchar甚至是时间。只是猜测。