Linux数据转换

作者: konishi5202 | 来源:发表于2019-02-21 09:57 被阅读20次

在实际编写程序的过程中,为了加强程序的稳健性,针对一串数据,我们常常需要进行预先的处理,然后才会真正的进行数据处理。比如我们首先要判断数据是否是数字、是否是字母、是否是ASCII码、是否是空格等等。下面就介绍一下这些函数,及其用法。附录中有C语言函数速查手册,便于阅读者使用。

一、字符数据识别

1.1 字母数字判断

【函数原型】:

#include <ctype.h>
int isalnum(int c);

【函数说明】:

判断字符c是否为字母或数字。当c为数字09或字母az及A~Z时,返回非零值,否则返回零。

【使用实例】:

#include <ctype.h>
#include <syslib.h>
int main(void)
{
    int c;
    clrscr();        // clear screen
    c='a';
    printf("%c:%s\n",c,isalnum(c)?"yes":"no");
    c='7';
    printf("%c:%s\n",c,isalnum(c)?"yes":"no");
    c='@';
    printf("%c:%s\n",c,isalnum(c)?"yes":"no");
    getchar();
    return 0;
}

1.2 英文字母判断

【函数原型】:

#include <ctype.h>
int isalpha(int c);

【函数说明】:

判断字符c是否为英文字母。当c为英文字母az或AZ时,返回非零值,否则返回零。

【使用实例】:

#include <ctype.h>
#include <stdio.h>
#include <syslib.h>
int main(void)
{
    int c;
    clrscr();        // clear screen
    printf("Press a key");
    
    for(;;)
    {
        c=getchar();
        clrscr();
        printf("%c: %s letter",c,isalpha(c)?"is":"not");
    }
    return 0;   // just to avoid warnings by compiler
}

1.3 小写字母判断

【函数原型】:

#include <ctype.h>
int islower(int c);

【函数说明】:

判断字符c是否为小写英文字母。当c为小写英文字母a~z时,返回非零值,否则返回零。

【使用实例】:

#include <ctype.h>
#include <syslib.h>
int main(void)
{
    int c;
    clrscr();        // clear screen
    c='a';
    printf("%c:%s\n",c,islower(c)?"yes":"no");
    c='A';
    printf("%c:%s\n",c,islower(c)?"yes":"no");
    c='7';
    printf("%c:%s\n",c,islower(c)?"yes":"no");
    getchar();
    return 0;
}

1.4 大写字母判断

【函数原型】:

#include <ctype.h>
int isupper(int c);

【函数说明】:

判断字符c是否为大写英文字母。当c为大写英文字母A~Z时,返回非零值,否则返回零。

【使用实例】:

#include <ctype.h>
#include <syslib.h>
int main(void)
{
    int c;
    clrscr();        // clear screen
    c='a';
    printf("%c:%s\n",c,isupper(c)?"yes":"no");
    c='A';
    printf("%c:%s\n",c,isupper(c)?"yes":"no");
    c='7';
    printf("%c:%s\n",c,isupper(c)?"yes":"no");
    getchar();
    return 0;
}

1.5 阿拉伯数字判断

【函数原型】:

#include <ctype.h>
int isdigit(int c);

【函数说明】:

判断字符c是否为数字。当c为数字0~9时,返回非零值,否则返回零。

【使用实例】:

#include <ctype.h>
#include <syslib.h>
int main(void)
{
    int c;
    clrscr();        // clear screen
    c='a';
    printf("%c:%s\n",c,isdigit(c)?"yes":"no");
    c='9';
    printf("%c:%s\n",c,isdigit(c)?"yes":"no");
    c='*';
    printf("%c:%s\n",c,isdigit(c)?"yes":"no");
    getchar();
    return 0;
}

1.6 十六进制判断

【函数原型】:

#include <ctype.h>
int isxdigit(int c);

【函数说明】:

判断字符c是否为十六进制数字。当c为数字09或为af(或A~F)之间的十六进制数字时,返回非零值,否则返回零。

【使用实例】:

#include <ctype.h>
#include <syslib.h>
int main(void)
{
    int c;
    clrscr();        // clear screen
    c='a';
    printf("%c:%s\n",c,isxdigit(c)?"yes":"no");
    c='9';
    printf("%c:%s\n",c,isxdigit(c)?"yes":"no");
    c='*';
    printf("%c:%s\n",c,isxdigit(c)?"yes":"no");
    getchar();
    return 0;
}

1.7 ASCII判断

【函数原型】:

#include <ctype.h>
int isascii(int c);

【函数说明】:

判断字符c是否为ASCII码。当c为ASCII码时,返回非零值,否则返回零。ASCII码指0x00~0x7F之间的字符。

【使用实例】:

#include <ctype.h>
#include <syslib.h>
int main(void)
{
    char s[]="文曲星-BJGGV";
    int i=12;            // length of string s
    clrscr();            // clear screen
    textmode(0xE0);      // make sure LCD mode is 3 big line
    printf("%s\n",s);
    for(i=0;i<12;i++)
    {
        if(isascii(s[i]))
            putchar('^');
        else
            putchar('.');
    }
    getchar();
    return 0;
}

1.8 空字符判断(TAB或空格)

【函数原型】:

#include <ctype.h>
int isblank (int c);

【函数说明】:

判断字符c是否为TAB或空格。当c为TAB或空格时,返回非零值,否则返回零。

【使用实例】:

#include <ctype.h>
#include <syslib.h>
int main(void)
{
    int c;
    clrscr();        // clear screen
    c='a';
    printf("%c:%s\n",c,isalnum(c)?"yes":"no");
    c='7';
    printf("%c:%s\n",c,isalnum(c)?"yes":"no");
    c='@';
    printf("%c:%s\n",c,isalnum(c)?"yes":"no");
}

1.9 空白字符判断

【函数原型】:

#include <ctype.h>
int isspace(int c);

【函数说明】:

判断字符c是否为空白符。当c为空白符时,返回非零值,否则返回零。空白符指空格、水平制表符、垂直制表符、换页、换行和回车。

【使用实例】:

#include <ctype.h>
#include <syslib.h>
int main(void)
{
    char s[]="Test Line 1\tend\nTest Line 2\r";
    int i;
    clrscr();        // clear screen
    for(i=0;i<strlen(s);i++)
    {
        if(isspace(s[i]))
            putchar('.');
        else
            putchar(s[i]);
    }
    getchar();
    return 0;
}

1.10 标点符号判断

【函数原型】:

#include <ctype.h>
int ispunct(int c);

【函数说明】:

判断字符c是否为标点符号。当c为标点符号时,返回非零值,否则返回零。标点符号指那些既不是字母数字,也不是空格的可打印字符。

【使用实例】:

#include <ctype.h>
#include <syslib.h>
#include <string.h>
int main(void)
{
    char s[]="Hello, Rain!";
    int i;
    clrscr();        // clear screen
    printf("%s\n",s);
    for(i=0;i<strlen(s);i++)
    {
        if(ispunct(s[i]))
            printf("^");
        else
            printf(".");
    }
    getchar();
    return 0;
}

1.11 可打印字符判断(除空格)

【函数原型】:

#include <ctype.h>
int isgraph(int c);

【函数说明】:

判断字符c是否为除空格外的可打印字符。当c为可打印字符(0x21~0x7E)时,返回非零值,否则返回零。

【使用实例】:

#include <ctype.h>
#include <syslib.h>
int main(void)
{
    int c;
    clrscr();        // clear screen
    c='a';
    printf("%c:%s\n",c,isgraph(c)?"yes":"no");
    c=' ';           // 0x20
    printf("%c:%s\n",c,isgraph(c)?"yes":"no");
    c=0x7f;
    printf("%c:%s\n",c,isgraph(c)?"yes":"no");
    getchar();
    return 0;
}

1.12 可打印字符判断(含空格)

【函数原型】:

#include <ctype.h>
int isprint(int c);

【函数说明】:

判断字符c是否为可打印字符(含空格)。当c为可打印字符(0x20~0x7E)时,返回非零值,否则返回零。

【使用实例】:

#include <ctype.h>
#include <syslib.h>
int main(void)
{
    int c;
    clrscr();        // clear screen
    c='a';
    printf("%c:%s\n",c,isprint(c)?"yes":"no");
    c=' ';
    printf("%c:%s\n",c,isprint(c)?"yes":"no");
    c=0x7f;
    printf("%c:%s\n",c,isprint(c)?"yes":"no");
    getchar();
    return 0;
}

1.13 控制字符判断

【函数原型】:

#include <ctype.h>
int iscntrl(int c);

【函数说明】:

该函数判断字符c是否为控制字符。当c在0x00~0x1F之间或者等于0x7F(DEL)时,返回非零值,否则返回零。

【使用实例】:

#include <ctype.h>
#include <syslib.h>
int main(void)
{
    int c;
    clrscr();        // clear screen
    c='a';
    printf("%x:%s\n",c,iscntrl(c)?"yes":"no");
    c=0x0d;
    printf("%x:%s\n",c,iscntrl(c)?"yes":"no");
    c=0x7f;
    printf("%x:%s\n",c,iscntrl(c)?"yes":"no");
    getchar();
    return 0;
}

二、字符数据转换

2.1 字符转换为ASCII码

【函数原型】:

#include <ctype.h>
int toascii(int c);

【函数说明】:

该函数将字符c转换为ASCII码。该函数将字符c的高位清零,仅保留低七位,返回转换后的数值。

【使用实例】:

#include <ctype.h>
#include <syslib.h>
int main(void)
{
    char s[]="文曲星-BJGGV";
    int i=12;            // length of string s
    clrscr();            // clear screen
    textmode(0xE0);      // make sure LCD mode is 3 big line
    printf("%s\n",s);
    for(i=0;i<12;i++)
        putchar(toascii(s[i]));
    getchar();
    return 0;
}

2.2 大小写之间转换

【函数原型】:

#include <ctype.h>
int toupper(int c);
int tolower(int c);

【函数说明】:

  • toupper()函数将字符c转换为大写英文字母。如果c为小写英文字母,则返回对应的大写字母;否则返回c原来的值;
  • tolower()函数将字符c转换为小写英文字母。如果c为大写英文字母,则返回对应的小写字母;否则返回c原来的值。

【使用实例1】:

#include <ctype.h>
#include <syslib.h>
int main(void)
{
    char *s="Hello, World!";
    int i;
    clrscr();        // clear screen
    printf("%s\n",s);
    for(i=0;i<strlen(s);i++)
    {
        putchar(toupper(s[i]));
    }
    getchar();
    return 0;
}

【使用实例2】:

#include <ctype.h>
#include <syslib.h>
int main(void)
{
    char *s="Hello, World!";
    int i;
    clrscr();        // clear screen
    printf("%s\n",s);
    for(i=0;i<strlen(s);i++)
    {
        putchar(tolower(s[i]));
    }
    getchar();
    return 0;
}

2.3 整数与字符串间转换

【函数原型】:

#include <stdlib.h>
char *itoa(int i);
int atoi(const char *nptr);

【函数说明】:

  • itoa()函数把整数i转换成字符串,并返回指向转换后的字符串的指针;
  • atoi()函数把整数字符串nptr转换成整形数据并返回;atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束符(‘\0’)时结束转换,并将结果返回;atoi()相当于函数strtol(nptr, (char **)NULL, 10);只是atoi()不检测错误。

【使用实例1】:

#include <syslib.h>
#include <stdlib.h>
int main(void)
{
    int i=7412;
    clrscr();        // clear screen
    textmode(0x00);
    printf("%d",i);
    printf("%s",itoa(i));
    getchar();
    return 0;
}

【使用实例2】:

#include <stdlib.h> 
#include <stdio.h> 
int main(void) 
{
    int n; 
    char *str = "12345.67"; 
    n = atoi(str); 
    printf("string = %s integer = %d\n", str, n); 
    return 0; 
}

2.4 长整型与字符串间转换

【函数原型】:

#include <stdlib.h>
long atol(const char *nptr);
long long atoll(const char *nptr);
long long atoq(const char *nptr);
long int strtol(const char *nptr, char **endptr, int base);
long long int strtoll(const char *nptr, char **endptr, int base);

【函数说明】:

  • atoll()函数把长整数字符串nptr转换成长整形数据并返回;
  • atoll()函数把长整型数据字符串转换为long long类型数据并返回;
  • atoq()函数与atoll()函数相同,把一个长整型数据字符串转换为long long类型数据并返回;atoq()是atoll()的过时名;
  • strtol()函数将参数nptr字符串根据参数base来转换成长整型数;参数base代表采用的进制方式,范围从2至36,或者0;当base值为0时则采用十进制做转换,但遇到如‘0x’前置字符则使用十六进制做转换;一开始strtol()函数会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或者正负符号才开始做转换,再遇到非数字或字符串结束符(‘\0’)结束转换,并将结果返回;若endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回;strtol()返回转换后的长整型数据,否则返回ERANGE并将错误代码存入errno中(ERANGE表示指定的转换字符串超出合法范围)。

【使用实例1】:

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
    long l;
    char *str = "98765432";
    l = atol(lstr);
    printf("string = %s integer = %ld\n", str, l);
    return(0); 
}

【使用实例2】:

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <limits.h>
int main(int argc, char *argv[])
{
    int base;
    char *endptr, *str;
    long val;
    if (argc < 2) {
        fprintf(stderr, "Usage: %s str [base]\n", argv[0]);
        exit(EXIT_FAILURE);
    }
    
    str = argv[1];
    base = (argc > 2) ? atoi(argv[2]) : 10;
    errno = 0;    /* To distinguish success/failure after call */
    val = strtol(str, &endptr, base);
    
    /* Check for various possible errors */
    if ((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN))
                || (errno != 0 && val == 0)) {
        perror("strtol");
        exit(EXIT_FAILURE);
    }
    if (endptr == str) {
        fprintf(stderr, "No digits were found\n");
        exit(EXIT_FAILURE);
    }
    /* If we got here, strtol() successfully parsed a number */
    printf("strtol() returned %ld\n", val);
    if (*endptr != ’\0’)        /* Not necessarily an error... */
        printf("Further characters after number: %s\n", endptr);
    exit(EXIT_SUCCESS);
}

2.5 无符号长整型与字符串间转换

【函数原型】:

#include <stdlib.h>
unsigned long int strtoul(const char *nptr, char **endptr, int base);
unsigned long long int strtoull(const char *nptr, char **endptr, int base);

【函数说明】:

  • strtoul()函数将参数nptr字符串根据参数base来转换成无符号长整型数;参数base代表采用的进制方式,范围从2至36,或者0;当base值为0时则采用十进制做转换,但遇到如‘0x’前置字符则使用十六进制做转换;一开始strtoul()函数会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字才开始做转换,再遇到非数字或字符串结束符(‘\0’)结束转换,并将结果返回;若endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回;
  • strtoull()函数与strtoul()函数类似,只是将字符串转换为unsigned long long类型的数据。

2.6 浮点型数据与字符串间转换

【函数原型】:

#include <stdlib.h>
double atof(const char *nptr);
double strtod(const char *nptr, char **endptr);
float strtof(const char *nptr, char **endptr);
long double strtold(const char *nptr, char **endptr);
char *gcvt(double number, size_t ndigit, char *buf);
char *ecvt(double number, int ndigits, int *decpt, int *sign);
char *fcvt(double number, int ndigits, int *decpt, int *sign);

【函数说明】:

  • atof()函数将一个浮点数字符串转化为一个浮点型数据并返回。其运行结果相当于:strtod()函数,但atof()并不对检测错误类型;
  • strtod()函数将一个浮点数字符串转化为一个double型数据并返回;strtod()会扫描nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,到出现非数字或字符串结束符(‘\0’)才结束转换,并将结果返回;若endptr不为NULL,则会将遇到不合格条件而终止的nptr中的字符串指针由endptr传回;参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分,如123.456或123e-2;
  • strtof()函数将一个单精度浮点数字符串转化为一个单精度浮点型数据并返回;
  • strtold()函数将一个长双精度型字符串转化为一个长双精度浮点型数据并返回;
  • gcvt()函数将浮点数number转换为长度为ndigit的字符串,使用FORTRANF或printfE格式;number是待转换的值;ndigit是转换后有效数字的个数;buf指向转换后字符串存放的位置;
  • ecvt()和fcvt()函数将浮点数值转换为字符串,低位数字四舍五入,数字舍入到指定位;number是待转换的值;ndigit是转换后有效数字的个数;decpt指小数点的位置;sign是数值符号;函数返回转换后的字符串指针。

【使用实例1】:

#include <stdio.h> 
#include <stdlib.h> 
int main(void) 
{
    float f; 
    char *str = "12345.67"; 
    f = atof(str); 
    printf("string = %s float = %f\n", str, f); 
    return 0; 
}

【使用实例2】:

#include <stdio.h>  
#include <stdlib.h>  
int main(void)  
{ 
    char input[80], *endptr;  
    double value;  
    
    printf("Enter a floating point number:");  
    gets(input);  
    value = strtod(input, &endptr);  
    printf("The string is %s the number is %lf\n", input, value);  
    return 0;  
}

【使用实例3】:

#include   <stdio.h>
#include   <stdlib.h>
int   main()
{
    char   str[25];
    double   num;
    int   sig=5;
    num=9.876;
    gcvt(num,sig,str);
    printf( "string=%s ",str);
    num=-123.4567;
    gcvt(num,sig,str);
    printf( "string=%s ",str);
    num=0.678e5;
    gcvt(num,sig,str);
    printf( "string=%s ",str);
    return(0);
}

【使用实例4】:

#include   <stdio.h>
#include   <stdlib.h>
#include   <conio.h>
int   main()
{
    char   *string;
    double   value;
    int   dec,sign;
    int   ndig=10;
    clrscr();
    value=9.876; 
    string=ecvt(value,ndig,&dec,&sign);
    printf( "string=%s   dec=%d   sign=%d ",string,dec,sign);
    value=-123.45;
    ndig=   15;
    string=ecvt(value,ndig,&dec,&sign);
    printf( "string=%s   dec=%d   sign=%d ",string,dec,sign);
    value=0.6789e5;
    ndig=5;
    string=ecvt(value,ndig,&dec,&sign);
    printf( "string=%s   dec=%d   sign=%d ",string,dec,sign);
    return   0;
}

相关文章

  • Linux数据转换

    在实际编写程序的过程中,为了加强程序的稳健性,针对一串数据,我们常常需要进行预先的处理,然后才会真正的进行数据处理...

  • iptables学习(1)

    概况 Linux系统中,防火墙(Firewall),网址转换(NAT),数据包(package)记录,流量统计,这...

  • mysql数据类型注意事项(1)

    在linux环境下运行,当从mysql数据表里导出数据类型为bit类型时,php需要用ord()函数进行转换。

  • libyuv 库编译

    libyuv 是谷歌开源的对 YUV 数据进行缩放、旋转和转换的跨平台库,可在 Windows、Linux、Mac...

  • day4循环和分支

    一、数据类型转换 1.数据类型自动转换 运行 2.强制转换 基本语法:类型名(需要转换的数据) a.将其他数据转换...

  • JAVA基础第四天

    JAVA数据类型---布尔类型; 数据类型转换自动数据类型转换 强制数据类型转换

  • python数据分析10:数据转换

    数据转换:一般包括一列数据转换为多列数据,行列转换,DataFrame转换为字典、列表和元组等 【一列数据转换为多...

  • 循环

    一,数据类型转换 基本格式:数据类型(带转换数据) 1.转换成int类型:int(待转换数据) (1).float...

  • 如何在linux部署kettle并实现定时调度任务

    最近工作中需要在linux部署kettle做数据抽取转换的工作,在此做个记录(略过安装jdk部分) 一:部署ket...

  • 2018-08-23day04循环和分支学习总结

    一.数据类型转换 1.数据类型的自动转换 2.强制转换 基本语法:类型名(需要转换的数据)a.将其他数据转换成in...

网友评论

    本文标题:Linux数据转换

    本文链接:https://www.haomeiwen.com/subject/ocnlyqtx.html