C Primer Plus 第6版 编程练习——第11章(下)

12.编写一个程序,读取输入,直至读到 BOF,报告读入的单词数、大写字母数、小写字母数、标点符号数和数字字符数。使用ctype.h头文件中的函数。

cpp 复制代码
#include <ctype.h>
int main()
{
    system("chcp 65001");
    char ch;
    int word_count = 0;
    int upper_count = 0;
    int lower_count = 0;
    int punct_count = 0;
    int digit_count = 0;
    char prch = 0;
    while ((ch = getchar()) != EOF)
    {
        if (isalpha(ch))
        {
            if (isupper(ch))
            {
                upper_count++;
            }
            else
            {
                lower_count++;
            }
        }
        else if (isdigit(ch))
        {
            digit_count++;
        }
        else if (ispunct(ch))
        {
            punct_count++;
            if (isalpha(prch))
            {
                word_count++;
            }
        }
        else if (ch == ' ')
        {
            if (isalpha(prch))
            {
                word_count++;
            }
        }
        prch = ch;
    }
    printf("单词数:%d\n大写字母数:%d\n小写字母数:%d\n标点符号数:%d\n数字字符数:%d\n", word_count, upper_count, lower_count, punct_count, digit_count);
    return 0;
}

13.编写一个程序,反序显示命令行参数的单词。例如,命令行参数是 see you later,该程序应打印later you see.

cpp 复制代码
int main(int argc, char* argv[])
{
    for (int i = argc - 1; i > 0; i--)
    {
        printf("%s ", argv[i]);
    }
    return 0;
}

14.编写一个通过命令行运行的程序计算幂。第1个命令行参数是double 类型的数,作为幂的底数,第2个参数是整数,作为幂的指数。

cpp 复制代码
int main(int argc, char* argv[])
{
    if (argc != 3)
    {
        printf("Usage: %s base exponent\n", argv[0]);
        return 1;
    }
    double base = atof(argv[1]);
    int exponent = atoi(argv[2]);
    double result = 1.0;
    for (int i = 0; i < exponent; i++)
    {
        result *= base;
    }
    printf("%g^%d = %g\n", base, exponent, result);
    return 0;
}

15.使用字符分类函数实现atoi()函数。如果输入的字符串不是纯数字,该函数返回0。

cpp 复制代码
int my_atoi(char* str)
{
    int result = 0;
    while (*str)
    {
        if (!isdigit(*str))
        {
            return 0;
        }
        result = result * 10 + (*str - '0');
        str++;
    }
    return result;
}
int main()
{
    char str[] = "123";
    char str2[] = "123s";
    printf("%d\n", my_atoi(str));
    printf("%d\n", my_atoi(str2));
    return 0;
}

16.编写一个程序读取输入,直至读到文件结尾,然后把字符串打印出来。该程序识别和实现下面的命令行参数:粉动灯

-P 按原样打印

-u 把输入全部转换成大写

-l 把输入全部转换成小写

cpp 复制代码
int main(int argc, char* argv[])
{
    system("chcp 65001");
    int flag = 0;
    char str[100];
    for (int i = 1; i < argc; i++)
    {
        if (strcmp(argv[i], "-P") == 0)
        {
            flag = 1;
        }
        else if (strcmp(argv[i], "-u") == 0)
        {
            flag = 2;
        }
        else if (strcmp(argv[i], "-l") == 0)
        {
            flag = 3;
        }
        else
        {
            printf("Usage: %s [-P] [-u] [-l]\n[-P] 按原样打印\n[-u] 把输入全部转换成大写\n[-l] 把输入全部转换成小写\n", argv[0]);
            return 1;
        }
        while (fgets(str, sizeof(str), stdin))
        { 
            switch (flag)
            {
            case 1:
                printf("%s", str);
                break;
            case 2:
                for (int i = 0; str[i]; i++)
                {
                    str[i] = toupper(str[i]);
                }
                printf("%s", str);
                break;
            case 3:
                for (int i = 0; str[i]; i++)
                {
                    str[i] = tolower(str[i]);
                }
                printf("%s", str);
                break;
            }
        }
    }
    return 0;
}

-P

-u

-l

相关推荐
C羊驼21 分钟前
C语言学习笔记(十一):数据在内存中的存储
c语言·经验分享·笔记·学习
承渊政道43 分钟前
【优选算法】(实战体验滑动窗口的奇妙之旅)
c语言·c++·笔记·学习·算法·leetcode·visual studio
C羊驼1 小时前
C语言学习笔记(十):操作符
c语言·开发语言·经验分享·笔记·学习
自信150413057592 小时前
选择排序算法
c语言·数据结构·算法·排序算法
hongtianzai2 小时前
Laravel7.x十大核心特性解析
java·c语言·开发语言·golang·php
weixin_649555672 小时前
C语言程序设计第四版(何钦铭、颜晖)第十章函数与程序结构之统计完全平方数
c语言·数据结构·算法
_饭团3 小时前
C 语言数据存储全解析:原反补码、大小端与 IEEE 754 浮点数
c语言·数据结构·算法·leetcode·面试·蓝桥杯·学习方法
m0_488633323 小时前
C语言学习笔记:探索简洁灵活且具多种特性的编程语言
c语言·学习笔记·编程语言·简洁性·灵活性
Felven4 小时前
C. Stable Groups
c语言·开发语言
C羊驼4 小时前
C语言学习笔记(十二):动态内存管理
c语言·开发语言·经验分享·笔记·青少年编程