用指针编程,从键盘上输入多个字符串(每个串不超过5个字符且没有空格),用”*****”作为输入结束的标记。从所输入的若干字符串中,找出一个最大的串(按字典序),并输出该串。要求串的输入以及最大串的查找通过调用编写的函数实现。输出行末无多余空格
时间: 2023-05-31 21:19:01 浏览: 145
### 回答1:
好的,以下是用指针编程,从键盘上输入多个字符串并查找最大串的代码实现(C语言):
```
#include <stdio.h>
#include <string.h>
#define MAX_LEN 6 // 字符串最大长度为5,再加上一个\0
// 查找最大的字符串,按字典序比较
char *max_string(char **strings, int num_strings) {
char *max_str = strings[0];
for (int i = 1; i < num_strings; i++) {
if (strcmp(strings[i], max_str) > 0) {
max_str = strings[i];
}
}
return max_str;
}
int main() {
char input_str[MAX_LEN];
char *strings[100]; // 假设最多输入100个字符串
int num_strings = 0;
while (1) {
scanf("%s", input_str);
if (strcmp(input_str, "*****") == 0) {
break;
}
strings[num_strings] = (char *)malloc(strlen(input_str) + 1);
strcpy(strings[num_strings], input_str);
num_strings++;
}
char *max_str = max_string(strings, num_strings);
printf("%s", max_str);
// 释放动态分配的内存
for (int i = 0; i < num_strings; i++) {
free(strings[i]);
}
return 0;
}
```
代码中使用了一个 `max_string()` 函数来查找最大的字符串。首先假设第一个字符串为最大串,然后遍历所有输入的字符串,如果当前字符串比最大串大,则更新最大串。
在 `main()` 函数中,使用一个字符数组 `input_str` 来接收从键盘输入的字符串,每次输入一个字符串后,先判断是否是输入结束的标记("*****"),如果是,则跳出循环,否则将输入的字符串动态分配内存,并将指针存储到一个 `strings` 数组中。
最后调用 `max_string()` 函数查找最大串,并输出。最后记得释放动态分配的内存。
希望这个代码能够帮到您。
### 回答2:
题目中的问题可以分为两个部分来回答,第一个是从键盘输入若干个字符串,并以”******“作为结束标记;第二个是从所输入的若干个字符串中寻找出一个最大(按字典序)的字符串,然后输出该串。下面分别来进行解答:
1. 从键盘输入若干个字符串,并以”******“作为结束标记
先来介绍一下什么是指针。指针是C语言中的一种特殊数据类型,它存储了变量的地址。指针变量存储的是一个地址值,地址值表示的是操作系统在内存中的一个位置。有关指针的更多知识可以参考其他教材。
思路:定义一个指向字符型的指针变量,使用scanf从键盘输入字符,并将输入的字符地址存储到指针变量所对应的地址上,最后检测字符串中的结束标记,结束输入。
代码如下:
```
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_LENGTH 5 // 字符串长度
#define MAX_NUM 100 // 最大输入字符串个数
void input_string(char *string_input[])
{
char *tmp = (char*)malloc(MAX_LENGTH * sizeof(char)); // 为指针变量分配内存
int i = 0;
while (i < MAX_NUM) {
scanf("%s", tmp);
if (strcmp(tmp, "******") == 0) {
break;
}
string_input[i++] = tmp;
tmp = (char*)malloc(MAX_LENGTH * sizeof(char)); // 再次为指针变量分配内存
}
string_input[i] = NULL; // 将数组最后一个元素赋为NULL,该正免得在查找最长字符串时出现段错误
}
int main()
{
char *string_input[MAX_NUM]; // 定义指针数组,可以指向字符型的变量
input_string(string_input);
return 0;
}
```
2. 从所输入的若干个字符串中寻找出一个最大(按字典序)的字符串,然后输出该串
思路:利用指针变量遍历字符串数组,将各个字符串先转化为对应的ASCii码,然后依次比较每一个字符的大小,最终得到最长字符串。
代码如下:
```
void max_string(char *string_input[])
{
char *max_str = string_input[0]; // 最大字符串初始化为数组的第一个
char *str;
int i = 1;
while (string_input[i] != NULL) {
str = string_input[i++];
if (strcmp(max_str, str) < 0) {
max_str = str;
}
}
printf("%s\n", max_str); // 输出最大字符串
}
int main()
{
char *string_input[MAX_NUM]; // 定义指针数组,可以指向字符型的变量
input_string(string_input);
max_string(string_input);
return 0;
}
```
综合以上两个实现函数,我们可以得到完整的程序。
### 回答3:
题目要求我们使用指针编程,在输入多个字符串之后,找出其中最大(按字典序)的字符串并输出,同时需要在输入字符串时使用“*****”来标记输入的结束。
我们可以先定义一个字符串数组,用来存储输入的多个字符串。由于每个输入的字符串不超过5个字符且没有空格,因此我们可以定义每个字符串数组的长度为6。
为了方便字符串数组的索引,我们可以使用一个计数器变量i来标记当前已输入的字符串数量。同时,我们也需要一个指针变量p来指向当前输入的字符串。
在使用指针输入字符串时,我们可以使用scanf函数,它可以接受格式化字符串来控制输入的格式。
接下来,我们需要遍历输入的所有字符串,比较它们的字典序,并记录下最大的字符串。这个过程可以使用for循环来实现。
最后,输出最大的字符串即可。
下面是代码示例:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[100][6];
int i = 0;
char *p = str[i];
printf("请输入字符串(每个串不超过5个字符且没有空格):\n");
while (scanf("%s", p) != EOF && strcmp(p, "*****") != 0) {
i++;
p = str[i];
}
int max_idx = 0;
char *max_str = str[max_idx];
for (int j = 1; j < i; j++) {
if (strcmp(str[j], max_str) > 0) {
max_str = str[j];
max_idx = j;
}
}
printf("最大的字符串是:%s\n", max_str);
return 0;
}
```
在该代码示例中,我们首先定义了一个字符串数组str,并初始化计数器变量i和指针变量p。接着,我们通过scanf函数来输入字符串,并用strcmp函数来比较字符串的字典序。
在最后的输出语句中,我们使用%s来输出最大的字符串。运行代码,输入多个字符串,以*****结尾。程序会在所有输入的字符串中找到最大的字符串并输出。
阅读全文