课程设计 字符串处理 问题描述: 设有若干个字符串,这些字符串存储位置的首地址保存在指针数组中(即字符串用指向字符的指针变量表示)。实现要求:使用C语言 ⑷ 设计一个菜单,具有上述规定的操作要求、退出系统等最基本的功能
时间: 2023-12-03 16:44:03 浏览: 65
C++中字符串以及数组和指针的互相使用讲解
以下是一个简单的字符串处理程序,可以实现菜单操作,包括字符串的输入、输出、长度计算、连接、复制、比较等操作:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STR_LEN 100 // 定义字符串最大长度
int main() {
char *strs[10]; // 存储字符串的指针数组
int n = 0; // 字符串数量
int option; // 菜单选项
while (1) {
// 显示菜单
printf("\n1. 输入字符串\n");
printf("2. 输出字符串\n");
printf("3. 计算字符串长度\n");
printf("4. 连接字符串\n");
printf("5. 复制字符串\n");
printf("6. 比较字符串\n");
printf("0. 退出\n");
printf("请选择操作:");
scanf("%d", &option);
switch (option) {
case 1: // 输入字符串
if (n == 10) {
printf("已达到最大字符串数量(10个)!\n");
continue;
}
strs[n] = (char *) malloc(MAX_STR_LEN);
printf("请输入字符串:");
scanf("%s", strs[n]);
n++;
break;
case 2: // 输出字符串
if (n == 0) {
printf("没有字符串可以输出!\n");
continue;
}
printf("请输入字符串的编号(1-%d):", n);
int idx;
scanf("%d", &idx);
if (idx < 1 || idx > n) {
printf("输入的编号不正确!\n");
continue;
}
printf("字符串%d:%s\n", idx, strs[idx-1]);
break;
case 3: // 计算字符串长度
if (n == 0) {
printf("没有字符串可以计算长度!\n");
continue;
}
printf("请输入字符串的编号(1-%d):", n);
scanf("%d", &idx);
if (idx < 1 || idx > n) {
printf("输入的编号不正确!\n");
continue;
}
printf("字符串%d的长度:%d\n", idx, strlen(strs[idx-1]));
break;
case 4: // 连接字符串
if (n < 2) {
printf("字符串数量不足(至少需要2个)!\n");
continue;
}
printf("请输入需要连接的两个字符串的编号(1-%d):", n);
int idx1, idx2;
scanf("%d%d", &idx1, &idx2);
if (idx1 < 1 || idx1 > n || idx2 < 1 || idx2 > n) {
printf("输入的编号不正确!\n");
continue;
}
strcat(strs[idx1-1], strs[idx2-1]);
printf("连接后的字符串%d:%s\n", idx1, strs[idx1-1]);
break;
case 5: // 复制字符串
if (n == 0) {
printf("没有字符串可以复制!\n");
continue;
}
printf("请输入需要复制的字符串的编号(1-%d):", n);
scanf("%d", &idx);
if (idx < 1 || idx > n) {
printf("输入的编号不正确!\n");
continue;
}
strs[n] = (char *) malloc(MAX_STR_LEN);
strcpy(strs[n], strs[idx-1]);
n++;
printf("复制后的字符串%d:%s\n", n, strs[n-1]);
break;
case 6: // 比较字符串
if (n < 2) {
printf("字符串数量不足(至少需要2个)!\n");
continue;
}
printf("请输入需要比较的两个字符串的编号(1-%d):", n);
scanf("%d%d", &idx1, &idx2);
if (idx1 < 1 || idx1 > n || idx2 < 1 || idx2 > n) {
printf("输入的编号不正确!\n");
continue;
}
int cmp = strcmp(strs[idx1-1], strs[idx2-1]);
if (cmp < 0) {
printf("字符串%d < 字符串%d\n", idx1, idx2);
} else if (cmp > 0) {
printf("字符串%d > 字符串%d\n", idx1, idx2);
} else {
printf("字符串%d = 字符串%d\n", idx1, idx2);
}
break;
case 0: // 退出
printf("谢谢使用!\n");
exit(0);
default: // 错误选项
printf("选项不正确,请重新选择!\n");
}
}
return 0;
}
```
在程序中,我们使用了一个指针数组 `strs` 来存储所有字符串的首地址,每个字符串最大长度为 100。菜单操作使用了一个无限循环,每次循环根据用户的选择执行相应的操作。具体操作如下:
1. 输入字符串:检查字符串数量是否达到最大值(10个),如果没有则分配空间并读入字符串。
2. 输出字符串:检查是否有字符串可以输出,如果有则输入字符串编号并输出该字符串。
3. 计算字符串长度:检查是否有字符串可以计算长度,如果有则输入字符串编号并输出该字符串的长度。
4. 连接字符串:检查字符串数量是否足够(至少需要 2 个),如果足够则输入需要连接的两个字符串的编号,并将第二个字符串连接到第一个字符串的后面。
5. 复制字符串:检查是否有字符串可以复制,如果有则输入需要复制的字符串的编号,并将其复制到一个新的字符串中。
6. 比较字符串:检查字符串数量是否足够(至少需要 2 个),如果足够则输入需要比较的两个字符串的编号,并使用 `strcmp` 函数比较它们的大小关系。
0. 退出:退出程序。
这个程序只是一个简单的示例,实际应用中还需要考虑很多其他因素,比如错误处理、内存管理、界面设计等。
阅读全文