C语言字符串类型定义(二维字符数组模拟连续存储多个字符串)(以小凡点名为例)
经过dev-Cpp检验
#define _CRT_SECURE_NO_WARNINGS /* 老师让小凡来完成点名,让小凡在早自习的时候就点好名。 老师给了小凡名单,小凡只要照着名单点名就好了是不是很简单啊。 输入 输入有多组数据,直到文件结束。 每组测试数据有三行,第一行为两个整数m, n(50 >= m >= n)。 第二行有m个名字,名字之间用空格隔开,是小凡班上同学的名单。 后面有n个名字是来上课的同学。(名字间用空格隔开。名字的长度不超过20个字符。) 输出 按照第一行的名单,每个人对应输出是否到了。 到的人输出Yes,没到的人输出No。 样例输入 3 2 Bob Marry Jam Bob Jam 2 2 Limeme Lintianzhi Limeme Lintianzhi 样例输出 Yes No Yes Yes Yes */ #include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> // // 拷贝到平台的时候把my_fuction_lib.h注释掉. //#include "my_fuction_lib.h" //在此下方插入自定义函数对的声明: //主函数main /*注意,再定义新类型时,strings[xx][xx]和string(*)[xx]=string[][xx]不同,后者存储大小未知*/ typedef char strings[50][100]; int main() { int n, m, i, j; ///*用字符数组模拟字符串类型 //用二维的字符数组类存储多个字符串*/ //char Roll[50][50];//roll 名单/打滚 //char Roll_call[50][50];//存储点到的同学的名字的容器 strings Roll, Roll_call; /*连续读入两个数,知道各组测试输入都结束位置eof 应当先设计如何读入一组完整的输入(一组输入可能包含各种格式) 然后设计一个循环类不断读入新数据*/ while (scanf("%d%d", &m, &n) != EOF) { // for(int i = 0;i<50;i++) // { // if(scanf("%s",Roll[i]) == EOF) // break; // } /* //既然不能只依靠scanf_s()来实现跳出该for,那就再for里的判断条件直接在读取条数上做个限制. //当然我起初的想法是想通过读入函数直接就达到结束读入的目的(幸运的是这个题提前知道了m,n(各部分会读入名字字符串的数目)) */ /*//读够m个了之后直接跳出循环*/ for (i = 0; i < m; i++) /*读入格式控制模式:%s;由于Roll是二维数组,所以Roll[i]就是第i各字符串的首地址*/ scanf("%s", Roll + i, 100); for (i = 0; i < n; i++) scanf("%s", Roll_call + i, 100); /*本问题需要用一个二重循环来遍历判断 根据花名册来循环*/ for (i = 0; i < m; i++) { /*为了确定被点到名的同学是否来了,需要对现场的所有学上进行一次遍历判断*/ for (j = 0; j < n; j++) { if (!strcmp(Roll[i], Roll_call[j])) { printf("Yes\n"); /*如果找到了的话,就没必要再找啦*/ break; } } /*如果找遍了所有的在场学生都没有找到,那么认定该同学缺勤(找遍了的判断条件为j=n)*/ if (j == n)//不加判断的话一定会输出No的.非break跳出内层for时,j++会到n printf("No\n"); } } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2022-03-11 新买的 U盘这么快就中病毒了!