运动会分数统计系统

运动会分数统计系统

注释

此文章内容均属实以该文章可以完成课程设计也可进行复刻补充来提高自身代码实战编写能力

要求

设计内容:

分别统计出其中英文字母数和空格数及整篇文章总字数;
统计某一字符串在文章中出现的次数,并输出该次数;
删除某一子串,并将后面的字符前移,输出删除某一字符串后的

(1) 输入一页文字,每行最多不超过80个字符,共N行(N=5);输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
(2)分别统计出其中英文字母数和空格数及整篇文章总字数
(3)统计某一字符串在文章中出现的次数,并输出次数;
(4)删除某一子串,并将后面的字符前移,输出删除某一字符串后的文章;
(5)输出形式:
a)分行输出用户输入的各行字符;
b)分4行输出“全部字母数"、“数字个数”、“空格个数”、“文章总字数”等信息。

设计要求:
(1)符合课题要求,实现相应功能;
(2)要求界面友好美观,操作方便易行;
(3)注意程序的实用性、安全性;

主要操作说明

//输入文本
inputText(lines, &numLines);
//分行输出用户输入的各行字符
printf("\n用户输入的文本内容如下:\n");
printText(lines, numLines);
//统计字母数、数字个数、空格个数及总字数
int letterCount = 0, digitCount = 0, spaceCount = 0,
    totalCount = 0;
countCharacters(lines, numLines, &letterCount, &digitCount,
    &spaceCount, &totalCount);
printf("\n统计结果:\n");
printf("全部字母数:%d\n", letterCount);
printf("数字个数:%d\n", digitCount);
printf("空格个数:%d\n", spaceCount);
printf("文章总字数:%d\n", totalCount);
//输入要查找的子串
char substring[MAX_CHARS_PER_LINE];
printf("\n请输入要查找的子串:");
fgets(substring, MAX_CHARS_PER_LINE, stdin);
substring[strcspn(substring, "\n")] = '\0'; //去掉换行符
//统计子串出现的次数
int occurrences = countSubstringOccurrences(lines, numLines, substring);
printf("子串\"%s\"出现的次数:%d\n", substring, occurrences);
//输入要删除的子串
printf("\n请输入要删除的子串:");
fgets(substring, MAX_CHARS_PER_LINE, stdin);
substring[strcspn(substring, "\n")] = '\0'; //去掉换行符
//删除子串并输出结果
deleteSubstring(lines, numLines, substring);
printf("\n删除子串\"%s\"后的文本内容如下:\n", substring);
printText(lines, numLines);
return 0;
}
//输入文本
void inputText(char lines[MAX_LINES][MAX_CHARS_PER_LINE], int *numLines) {
    printf("请输入文本(每行最多不超过80个字符,输入空行结束):\n");
    while (*numLines < MAX_LINES) {
        printf("行%d:", *numLines + 1);
        fgets(lines[*numLines], MAX_CHARS_PER_LINE, stdin);
        lines[*numLines][strcspn(lines[*numLines], "\n")] = '\0'; //去掉换行符
        if (strlen(lines[*numLines]) == 0) break; //输入空行结束
        (*numLines)++;
    }
}
//打印文本
void printText(char lines[MAX_LINES][MAX_CHARS_PER_LINE], int numLines) {
    for (int i = 0; i < numLines; i++) {
        printf("%s\n", lines[i]);
    }
}
//统计字符数量
void countCharacters(char lines[MAX_LINES][MAX_CHARS_PER_LINE], int numLines, int *letters, int *digits, int *spaces, int *total) {
    *letters = *digits = *spaces = *total = 0;
    for (int i = 0; i < numLines; i++) {
        for (int j = 0; j < strlen(lines[i]); j++) {
            if (isalpha(lines[i][j])) (*letters)++;
            if (isdigit(lines[i][j])) (*digits)++;
            if (isspace(lines[i][j])) (*spaces)++;
            (*total)++;
        }
    }
}
//统计子串出现次数
int countSubstringOccurrences(char lines[MAX_LINES][MAX_CHARS_PER_LINE], int numLines, const char *substring) {
    int count = 0;
    for (int i = 0; i < numLines; i++) {
        char *pos = lines[i];
        while ((pos = strstr(pos, substring))!= NULL) {
            count++;
            pos += strlen(substring);
        }
    }
    return count;
}
//删除子串
void deleteSubstring(char lines[MAX_LINES][MAX_CHARS_PER_LINE], int numLines, const char *substring) {
    int len = strlen(substring);
    for (int i = 0; i < numLines; i++) {
        char *pos;
        while ((pos = strstr(lines[i], substring))!= NULL) {
            memmove(pos, pos + len, strlen(pos + len) + 1);
        }
    }
}
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1)问题描述 参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20) 2)基本要求 (1)可以输入各个项目的前三名或前五名的成绩; (2)能统计各学校总分, (3)可以按学校编号、学校总分、男女团体总分排序输出; (4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。 规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称) 输出形式:有中文提示,各学校分数为整型 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构; 测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值