用指针编程,从键盘上输入多个字符串(每个串不超过5个字符且没有空格),用”*****”作为输入结束的标记。从所输入的若干字符串中,找出一个最大的串(按字典序),并输出该串。要求串的输入以及最大串的查找
时间: 2023-04-26 09:01:25 浏览: 274
可以使用指针编程,从键盘上输入多个字符串,每个串不超过5个字符且没有空格,以”*****”作为输入结束的标记。然后从所输入的若干字符串中,找出一个最大的串(按字典序),并输出该串。需要注意的是,串的输入以及最大串的查找都需要使用指针来实现。
相关问题
2.查找最大串。用指针法编程,从键盘上输入多个字符串(每个串不超过5个字符且没有空格),用”*”作为输入结束的标记。从所输入的若干字符串中,找出一个最大的串,并输出该串。要求串的输入以及最大串的查找通过调用编写的函数实现。 (⚠注:以上两题请全部用指针实现!)
以下是用指针法编写的最大串查找程序:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 6 // 最大字符串长度
// 查找最大串的函数
char* findMaxStr(char** strArray, int count) {
char* maxStr = strArray[0];
for (int i = 1; i < count; i++) {
if (strlen(maxStr) < strlen(strArray[i])) {
maxStr = strArray[i];
}
}
return maxStr;
}
int main() {
char* strArray[100]; // 存储输入的字符串的指针数组
int count = 0; // 输入的字符串数量
// 输入字符串,以 * 结束
printf("请输入若干个字符串(每个串不超过5个字符且没有空格),以 * 结束:\n");
char str[MAX_LEN];
while (1) {
scanf("%s", str);
if (strcmp(str, "*") == 0) {
break;
}
strArray[count] = strdup(str);
count++;
}
// 查找最大串并输出
char* maxStr = findMaxStr(strArray, count);
printf("最大的串是:%s\n", maxStr);
// 释放内存
for (int i = 0; i < count; i++) {
free(strArray[i]);
}
return 0;
}
```
程序先定义了一个指针数组 `strArray`,用于存储输入的字符串。然后通过循环不断从键盘输入字符串,以 `*` 结束输入。输入过程中,每个字符串被存储到 `strArray` 数组中,并且输入的字符串数量 `count` 递增。输入结束后,调用 `findMaxStr()` 函数查找最大的串,并输出结果。最后释放动态分配的内存。
函数 `findMaxStr()` 定义了两个参数:一个是字符串的指针数组,另一个是字符串的数量。函数通过循环遍历数组,找到长度最长的字符串,并返回该字符串的指针。
从键盘上输入多个字符串 (每个串不超过6个字符且没有空格),用”####”作为串输入结束的标记。从所输入的若干字符串中,找出一个最小的串,并输出该串。要求最小串的查找通过调用编写的函数实现 void find(char *name , int n, int *p) //在包含n个字符串的二维字符数组name中,查找值最小的字符串,将其下标存入指针p所指内存单元 输入行输入一个字符串,输入多行 输出输出一个字符串,单独占一行。
好的,下面是一个示例代码,可以实现您的要求:
```c
#include <stdio.h>
#include <string.h>
void find(char *name[], int n, int *p);
int main() {
// 定义字符串数组,存储多个字符串
char *names[100];
int n = 0;
// 从键盘上输入多个字符串,以 "####" 结束
printf("请输入多个字符串,以 #### 结束:\n");
while (1) {
char *name = malloc(7 * sizeof(char));
scanf("%s", name);
if (strcmp(name, "####") == 0) {
free(name);
break;
}
names[n++] = name;
}
// 查找值最小的字符串
int index;
find(names, n, &index);
// 输出最小的字符串
printf("最小的字符串是:%s\n", names[index]);
// 释放内存
for (int i = 0; i < n; i++) {
free(names[i]);
}
return 0;
}
void find(char *name[], int n, int *p) {
*p = 0;
for (int i = 1; i < n; i++) {
if (strcmp(name[i], name[*p]) < 0) {
*p = i;
}
}
}
```
输入多个字符串后,程序会调用 `find` 函数查找值最小的字符串,并输出该字符串。`find` 函数中使用了字符串的比较函数 `strcmp` 进行比较,找到最小的字符串后将其下标存入指针 `p` 所指的内存单元中。
需要注意的是,在输入字符串时,需要使用动态内存分配函数 `malloc` 分配内存空间,以便在程序结束时能够释放内存,避免内存泄漏。在程序中,使用循环遍历字符串数组并调用 `free` 函数释放内存。
输出结果示例如下:
```
请输入多个字符串,以 #### 结束:
abc
def
ghi
jkl
####
最小的字符串是:abc
```
可以看到,程序输出了输入的多个字符串中最小的字符串,即 `abc`。
阅读全文