首页 > 解决方案 > 如何在Linux中的c中读取文件中没有不可见字符的每5位数字?

问题描述

我想每 5 个字符读取一次,但是当我打印输出时,我得到的字符少于 5 个,因为源文件中有不可见的字符。我怎样才能跳过它们?

for(int i=0; i<sizeof(buf);i++){
// perform some operation 
}
printf("%s",buf);

标签: clinuxfile

解决方案


isspace定义了一个有用的函数,ctype.h可以准确检查您要问的内容 - char 是否为空格。

那里还定义了几个额外的有趣的字符分类功能(更多信息):

int isalnum(int c);
int isalpha(int c);
int iscntrl(int c);
int isdigit(int c);
int isgraph(int c);
int islower(int c);
int isprint(int c);
int ispunct(int c);
int isspace(int c);
int isupper(int c);
int isxdigit(int c);
int isascii(int c);
int isblank(int c);

事实上,有 3 类函数可以对字符进行分类,用于字节字符串宽字符串多字节字符串

对于您的示例,使用语言环境避免任何类型的空格en_US.UTF-8

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

int main(void)
{
    unsigned char * BUF = " a\vb\nc d\tefghijk";
    setlocale(LC_ALL, "en_US.UTF-8");

    for (int i = 0, c = 5; i < strlen(BUF) && c > 0;++i){
        unsigned char chr = BUF[i];
        if (isspace(chr))
                continue;
        printf("%c", chr);
        c--;
    }
    printf("\n");
}

不要忘记这些功能取决于编码。对于不同的编码,相同的字符可能有不同的分类。


推荐阅读