明解C语言入门篇(第11章练习题)

11.1

#include<stdio.h>

int main(void)
{
    char *p = "123";
    printf("p = \"%s\"\n", p);
    p = "456" + 1;
    printf("p = \"%s\"\n", p);

    return 0;
}

11.2

#include<stdio.h>

int main(void)
{
    int i, n1, n2;
    char a[][5] = {"LISP", "C", "Ada"};
    char *p[] = {"PAUL", "X", "MAC"};

    n1 = sizeof(a) / sizeof(a[0]);
    n2 = sizeof(p) / sizeof(p[0]);
    for (i = 0; i < n1; i++)
        printf("a[%d] = \"%s\"\n", i, a[i]);
    for (i = 0; i < n2; i++)
        printf("p[%d] = \"%s\"\n", i, p[i]);

    return 0;
}

11.3

#include<stdio.h>

char* str_copy(char *d, const char *s)
{
    char *t = d;

    while (*d++ = *s++)
        ;
    return t;
}

int main(void)
{
    char str[128] = "ABC";
    char tmp[128];

    printf("str = \"%s\"\n", str);
    printf("复制的是: ", tmp);
    scanf("%s", tmp);
    puts("复制了。");
    printf("str = \"%s\"\n", str_copy(str, tmp));

    return 0;
}

11.4

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

void put_string(const char *s)
{
    while(*s)
        printf("%c", *s++);
}

int main(void)
{
    char *str = "ABC";

    put_string(str);

    return 0;
}

11.5

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

int str_chnum(const char *s, int c)
{
    int cnt = 0;

    while (*s)
    {
        if (*s == c)
            cnt++;
        *s++;
    }
    return cnt;
}

int main(void)
{
    char str[128];
    char ch = 'a';

    printf("请输入字符串: ");
    scanf("%s", str);
    printf("字符串中字符%c的个数为%d。\n", ch, str_chnum(str, ch));

    return 0;
}

11.6

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

char *str_chr(const char *s, int c)
{
    char *p;

    while (*s)
    {
        if (*s == c)
        {
             p = s;
             break;
        }
        else
            p = NULL;
        *s++;
    }
    return p;
}

int main(void)
{
    char a[128];
    char ch = 'b';

    printf("请输入字符串: ");
    scanf("%s", a);
    printf("返回的指针为%p\n", str_chr(a, ch));

    return 0;
}

11.7

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

void str_toupper(char *s)
{
    while (*s)
    {
        *s = toupper(*s);
        *s++;
    }
}

void str_tolower(char *s)
{
    while (*s)
    {
        *s = tolower(*s);
        *s++;
    }
}

int main(void)
{
    char str[128];

    printf("请输入字符串: ");
    scanf("%s", str);
    str_toupper(str);
    printf("大写字母: %s\n", str);
    str_tolower(str);
    printf("小写字母: %s\n", str);

    return 0;
}

11.8

#include<stdio.h>

void del_digit(char *str)
{
    char *tmp = str;

    while (*tmp)
    {
        if (*tmp >= '0' && *tmp <= '9')
             tmp++;
        else
            *str++ = *tmp++;
    }
    *str = '\0';
}

int main(void)
{
    char s[128];

    printf("请输入字符串: ");
    scanf("%s", s);
    del_digit(s);
    printf("处理后的字符串为\"%s\"\n", s);

    return 0;
}

11.9

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

int main(void)
{
    char s1[] = {"HELLO"};
    char s2[] = {"WORLD"};
    char s3[] = {"PERSON"};

    printf("%d\n", strlen(s3));
    printf("\"%s\"\n", strcpy(s1, s2));
    printf("\"%s\"\n", strncpy(s1, s2, 5));
    printf("\"%s\"\n", strcat(s1, s3));
    printf("\"%s\"\n", strncat(s1, s2, 5));
    printf("%d\n", strcmp(s1, s2));
    printf("%d\n", strncmp(s1, s2, 5));

    return 0;
}

11.10

/* 实现与库函数atoi相同的功能 */
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int strtoi(const char *nptr)
{
    int flag = 1;
    int sum = 0;

    while (*nptr)
    {
        if (*nptr == ' ')
            nptr++;
        else if (*nptr == '-')    // 字符串里的数字为负数
        {
            flag = -1;
            nptr++;
        }
        else if (*nptr == '+')
        {
            flag = 1;
            nptr++;
        }
        else if (*nptr >= '0' && *nptr <= '9')
        {
            sum = sum * 10 + (*nptr - '0');
            nptr++;
        }
        else
            return 0;
    }
    sum *= flag;
    return sum;
}

int main(void)
{
    char s[128];

    printf("请输入字符串: ");
    scanf("%s", s);
    printf("转换为整数后为%d。\n", atoi(s));
    printf("%d\n", strtoi(s));

    return 0;
}

版权声明:本文为weixin_42916038原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。