Linux应用

Linux数据转换

2019-02-21  本文已影响20人  konishi5202

在实际编写程序的过程中,为了加强程序的稳健性,针对一串数据,我们常常需要进行预先的处理,然后才会真正的进行数据处理。比如我们首先要判断数据是否是数字、是否是字母、是否是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);

【函数说明】:

【使用实例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);

【函数说明】:

【使用实例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);

【函数说明】:

【使用实例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);

【函数说明】:

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);

【函数说明】:

【使用实例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;
}
上一篇下一篇

猜你喜欢

热点阅读