c - 使用指针按字母顺序对字符串数组进行排序
问题描述
我有一个项目,我必须创建一个程序,让用户以任何顺序输入姓名。然后程序按字母顺序显示名称。此外,所有这些都必须使用指针来完成。现在我对程序的尝试提示用户输入名称并显示它们,但由于某种原因我无法对其进行排序。有人可以帮帮我吗?
这是我对该程序的尝试:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main() {
int list;
char *names[20];
char str[20];
printf("Enter the number of names: ");
scanf("%d", &list);
fflush(stdin);
for (int i = 0; i < list; i++) {
printf("Enter name %d: ", i + 1);
// gets(str);
scanf("%[^\t\n]s", str);
fflush(stdin);
names[i] = (char *)malloc(strlen(str) + 1);
strcpy(names[i], str);
}
void sortNames();
for (int i = 0; i < 5; i++)
printf("%s\n", names[i]);
return 0;
}
void sortNames(char **name, int *n) {
int i, j;
for (j = 0; j < *n - 1; j++) {
for (i = 0; i < *n - 1; i++) {
if (compareStr(name[i], name[i + 1]) > 0) {
char *t = name[i];
name[i] = name[i + 1];
name[i + 1] = t;
}
}
}
}
int compareStr(char *str1, char *str2) {
while (*str1 == *str2) {
if (*str1 == '\0' || *str2 == '\0')
break;
str1++;
str2++;
}
if (*str1 == '\0' && *str2 == '\0')
return 0;
else
return -1;
}
解决方案
这里的问题是该函数compareStr
永远不会返回大于 0 的值。它只会告诉您 2 个字符串是否相似。
对于排序,您需要添加一个额外的逻辑,如下所示:
int compareStr(char *str1, char *str2) {
while (*str1 == *str2) {
if (*str1 == '\0' || *str2 == '\0')
break;
str1++;
str2++;
}
if (*str1 == '\0' && *str2 == '\0'){
return 0;
}
else if(*str1 > *str2){
return 1;
}else{
return -1;
}
}
除此之外,您必须调用函数sortNames
作为sortNames(names, &list)并确保函数定义以正确的顺序编写或使用函数声明。
推荐阅读
- python - Dash Plotly - 当仅更改数据源时,如何解决 IndexError: list index out of range'?
- jquery - Ajax JQuery - 将返回的变量 + 输入按钮和 Span 附加到 Div
- tensorflow - 目标检测模型卡在低 mAP
- vim - 为什么 Vim 会认为一个文件不是只读的?
- arrays - 为什么我不能使用字节或文件作为有效负载调用 sagemaker 端点
- node.js - SurveyMonkey API 使用 NodeJS 创建调查
- c# - 基于在 C# 中选中的单选按钮自动填充文本框?
- c++ - C++ 并发队列按引用或值推送
- php - 将数组转换为普通数组
- javascript - TypeScript 参数定义覆盖