欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C程序设计语言练习 第二章

程序员文章站 2022-03-25 22:50:32
2.3 常量 strlen函数:返回s的长度 2.7 类型转换 atoi函数:将字符串s转换为相应的整型 C int atoi(char s[]) { int n = 0; for (int i = 0; s[i] = '0' && s[i] = 'A' && c = '0' && s[i] = ' ......

2.3 常量

strlen函数:返回s的长度

int strlenn(char s[])
{
    int i=0;
    while(s[i] != '\0')
        ++i;
    return i;
}

2.7 类型转换

atoi函数:将字符串s转换为相应的整型

int atoi(char s[])
{
    int n = 0;
    for (int i = 0; s[i] >= '0' && s[i] <= '9'; i++)
        n = 10*n + (s[i] - '0');
    return n;
}

lower函数:把字符c转换为小写形式,只对ascii字符集有效

int lower(int c)
{
    if(c >= 'a' && c <= 'z')
        return c + 'a' -'a';
    else
        return c;    
}

rand函数:返回取值在0~32767之间的伪随机数,\(2^{15}\) = 32768
srand函数:为rand()函数设置种子数

unsigned long  int next = 1;

int rand()
{
    next = next*1103515245 + 12345;
    return (unsigned int)(next/65536)%32768;
}

void srand(unsigned int seed)
{
    next = seed;
}

练习2-3

编写函数htoi(s), 把由十六进制数字组成的字符串(包含可选的前缀0x或0x)转换为与之等价的整型值。字符串中允许包含数字包括:0~9,a~f以及a~f。

int htoi(char s[])
{
    int n = 0,i = 0;
    if(s[0] == '0' && (s[1] == 'x' || s[1] == 'x')) i = 2;

    for(; s[i] != '\0'; ++i) {
        if(s[i] >= '0' && s[i] <= '9')
            n = 16*n + (s[i] - '0');
        else if(s[i] >= 'a' && s[i] <= 'f')
            n = 16*n + (s[i] - 'a' + 10);
        else if(s[i] >= 'a' && s[i] <= 'f')
            n = 16*n + (s[i] - 'a' + 10);
        else break;
    }
    return n;
}

2.8 自增运算符与自减运算符

squeeze函数:从字符串s中删除字符

void squeeze(char s[], char c)
{
    int i,j;
    for(i=j=0; s[i] != '\0'; ++i)
        if(s[i] != c) //当不相等时才赋值,否则忽略
            s[j++] = s[i];
    s[j] = '\0';
}

strcat函数:将字符串t连接到字符串s的尾部;s必须有足够大的空间

void strcatt(char s[], char t[])
{
    int i=0,j=0;
    while(s[i] != '\0')
        ++i;
    while((s[i++] = t[j++]) != '\0')
        ;
}

练习2-4

重写函数squeeze(s1,s2),将字符串s1中任何与字符串s2中字符匹配的字符都删除。

void squeeze2(char s1[], char s2[])
{
    int i,j,z;
    for(i=j=0; s1[i] != '\0'; ++i) {
        for(z=0; s2[z] != '\0'&& s1[i] != s2[z]; ++z)
            ;
        if(s2[z] == '\0') s1[j++] = s1[i]; //s2没有与之相等的字符
    }
    s1[j] = '\0';
}