7-3 组织星期信息 (10分)

这篇博客介绍如何使用C语言定义一个指针数组来组织星期信息,并进行字符串搜索。通过输入一个正整数repeat,重复执行查找操作。当找到输入的字符串时,输出其在数组中的序号,否则输出-1。

输入一个正整数repeat (0<repeat<10),做repeat次下列运算:

定义一个指针数组将下面的星期信息组织起来,输入一个字符串,在表中查找,若存在,输出该字符串在表中的序号,否则输出-1。

Sunday Monday Tuesday Wednesday Thursday Friday Saturday

输入输出示例:括号内为说明,无需输入输出

输入样例 (repeat=3) :

3
Tuesday
Wednesday
year

输出样例:

3
4
-1

代码:

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

int main()
{
   
   
    char *word[] = 
<think>好的,我现在需要帮助用户解决如何使用指针数组在C语言中实现星期信息查找功能的问题。用户希望输入一个字符串,然后返回该字符串在指针数组中的序号,如果不存在则返回-1。首先,我需要回顾用户提供的引用内容,看看是否有相关的信息可以利用。 首先,引用[1]提到了几种计算字符串长度的方法,包括使用数组下标、指针解引用、递归以及指针相减的方式。这可能对比较字符串时有用,但用户的问题是关于查找字符串在数组中的位置,所以可能需要字符串比较函数strcmp。不过用户提供的代码中没有直接使用这些方法,但需要确保字符串的正确处理。 引用[2]讨论了字符数组和指针的不同,指出字符数组是复制字符串到数组中,而指针指向字符串常量。这提示我在定义指针数组存储星期信息时,应该使用指向字符串常量的指针数组,因为星期名称是固定的,不需要修改,这样可以节省内存并避免复制。例如,constchar*days[]= {"Monday","Tuesday", ...};。引用[3]提到了二维字符数组和delete[]的使用,但用户的问题是关于C语言,所以可能不需要考虑C++的delete,但需要注意数组和指针的正确使用。这里用户需要定义一个指针数组,每个元素指向一个字符串常量,这样在查找时可以直接比较指针指向的内容。 现在,我需要设计一个指针数组来存储星期信息星期有七天,所以数组大小为7。每个元素是一个指向字符串常量的指针。然后,用户输入一个字符串,遍历这个指针数组,比较输入的字符串是否与数组中的某个元素相等。如果找到,返回对应的索引,否则返回-1。 接下来需要考虑的是如何比较字符串。C语言中应该使用strcmp函数,该函数比较两个字符串的内容,如果相同返回0。因此,在遍历数组时,对每个元素调用strcmp,如果返回0,说明找到了,返回当前索引。需要注意的几点:1.输入字符串的长度不能超过星期名称的最大长度,否则可能导致缓冲区溢出。可以使用fgets或者限制scanf的输入长度。2.字符串比较是区大小写的,用户可能需要考虑大小写不敏感的情况,但题目中没有提到,所以默认区大小写。 3.指针数组应该声明为const char*,因为字符串常量不可修改。可能的实现步骤:1.定义指针数组存储星期名称。2.读取用户输入的字符串,可能需要去除换行符(如果使用fgets)。 3.遍历指针数组,使用strcmp比较每个元素与输入字符串。 4.找到匹配则返回索引,否则返回-1。测试案例需要考虑不同情况,比如正确存在的字符串、不存在的情况、大小写不匹配等。现在,根据这些思考,编写代码示例。例如:定义指针数组: constchar*days[]= {"Monday","Tuesday", "Wednesday","Thursday", "Friday","Saturday", "Sunday"}; 读取输入:char input[20]; scanf("%19s",input);//限制输入长度防止溢出遍历比较: for(inti =0;i <7; i++) {if(strcmp(input, days[i])==0){return i;} }return -1;需要注意字符串比较的正确性,以及输入处理的安全性。此外,数组索引从0开始还是从1开始需要明确,用户可能期望星期一到星期日对应0到6,或者1到7,但通常数组索引从0开始,所以返回0-6,如果用户希望1-7,则返回i+1,但题目要求返回位置,可能需要根据题目示例调整。例如,如果输入"Monday",应返回0;输入"Sunday"返回6;如果输入其他字符串,返回-1。 现在,将这些步骤整合成完整的C程序,包括必要的头文件,如stdio.h和string.h,并编写主函数。</think>### 解决方案 使用指针数组存储星期信息,通过字符串比较函数`strcmp`实现查找功能,时间复杂度为$O(n)$,空间复杂度为$O(1)$。 #### 实现步骤 1. **定义指针数组**: - 存储7星期名称的字符串常量 - 使用`const char*`类型保证字符串不可修改[^2] 2. **输入处理**: - 使用`fgets`安全读取输入,避免缓冲区溢出 - 去除输入字符串末尾的换行符 3. **遍历比较**: - 使用`strcmp`逐个比较输入字符串与数组元素 - 找到匹配项立即返回索引 ```c #include <stdio.h> #include <string.h> int find_weekday(const char* input) { const char* days[] = { // 定义星期指针数组 "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }; for (int i = 0; i < 7; i++) { if (strcmp(input, days[i]) == 0) { // 精确匹配字符串[^1] return i; // 返回数组索引(0-6) } } return -1; } int main() { char input[20]; printf("输入星期名称:"); fgets(input, sizeof(input), stdin); // 安全输入方式 input[strcspn(input, "\n")] = &#39;\0&#39;; // 去除换行符 int index = find_weekday(input); if (index != -1) { printf("索引号:%d\n", index); } else { printf("未找到\n"); } return 0; } ``` ### 关键点解析 1. **指针数组优势**:比二维字符数组更节省内存,每个指针直接指向字符串常量[^2] 2. **安全输入**:`fgets`配合`strcspn`防止输入溢出和保留换行符 3. **精确匹配**:`strcmp`返回0表示完全匹配,区大小写 ### 测试案例 | 输入 | 输出 | |-----------|-------| | Wednesday | 2 | | sunday | -1 | | Friday | 4 | | Hello | -1 |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值