按字母顺序显示名称
displaying names in alphabetical order
我想制作一个程序,提示用户输入班级中的学生人数,然后循环读取这么多名字。一旦读完所有的名字,就会报告哪个学生将排在队伍的最前面,哪个学生会在队伍的末尾。您可以假设没有两个学生具有相同的名字。
但是我的输出程序没有显示字符串的正确比较......
以下是我的输出。请帮助我。
Enter the number of students(1 - 25): 5
Enter the name: ali
Enter the name: hamxa
Enter the name: hassan
Enter the name: anjum
Enter the name: java
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠java ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠java
Press any key to continue . . .
以下是我的代码
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
const int size = 10;
char name[size], largest[size], smallest[size];
double num;
do
{
cout << "Enter the number of students(1 - 25): ";
cin >> num;
} while (num < 1 || num > 25);
cin.ignore();
for (int i = 0; i < num; i++)
{
cout << "Enter the name: ";
cin.getline(name, size);
if (strcmp(name, largest) > 0)
{
largest[size] = name[size];
}
if (strcmp(name, smallest) < 0)
{
smallest[size] = name[size];
}
}
cout << largest << " " << smallest << endl;
return 0;
}
首先,您需要将largest[size] = name[size];
更改为strcpy(largest, name);
largest[size] = name[size]
没有意义,因为largest[i]
等于(i+1(个符号,在你的例子中size = 10
,largest
的长度为10,所以largest[size]
指向不存在的第11个符号。
strcpy
将一个字符串复制到另一个字符串。
其次,您必须为 smallest
和 largest
设置默认值。因为默认情况下char[]
等于像╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
这样的垃圾.
char largest[size] = "";
char smallest[size] = "zzzzzzzzz";
所以你的代码应该类似于这个
const int size = 10;
char name[size];
char largest[size] = "";
char smallest[size] = "zzzzzzzzz";
double num;
do
{
cout << "Enter the number of students(1 - 25): ";
cin >> num;
} while (num < 1 || num > 25);
cin.ignore();
for (int i = 0; i < num; i++)
{
cout << "Enter the name: ";
cin.getline(name, size);
if (strcmp(name, largest) > 0)
{
strcpy(largest, name);
}
if (strcmp(name, smallest) < 0)
{
strcpy (smallest, name);
}
}
cout << largest << " " << smallest << endl;
对于初学者来说,将变量num
声明为具有类型double
是没有意义的。
double num;
我认为名字的数量不能是零头。
最好将其声明为至少具有类型 size_t
size_t num;
字符数组largest
和smallest
最初未初始化。所以 if 语句中的这些条件也没有意义
if (strcmp(name, largest) > 0)
//...
if (strcmp(name, smallest) < 0)
您应该使用"空"字符串初始化数组,或者在主 for 循环中将字符串复制到它们。
数组没有复制赋值运算符。您必须将一个数组的元素复制到另一个数组中。对于包含字符串的字符数组,可以使用标准 C 函数strcpy
。
而这些陈述
largest[size] = name[size];
smallest[size] = name[size];
尝试将一个数组中不存在的元素分配给另一个数组。它们不会将字符串从一个数组复制到另一个数组中。
程序可以通过以下方式查找示例
#include <iostream>
#include <cstring>
int main()
{
const size_t SIZE = 10;
char name[SIZE], largest[SIZE], smallest[SIZE];
size_t num;
do
{
std::cout << "Enter the number of students(1 - 25): ";
std::cin >> num;
} while (num < 1 || num > 25);
std::cin.ignore();
for ( size_t i = 0; i < num; i++ )
{
std::cout << "Enter the name: ";
std::cin.getline( name, SIZE );
if ( i == 0 )
{
std::strcpy( largest, name );
std::strcpy( smallest, name );
}
else if ( std::strcmp( largest, name ) < 0 )
{
std::strcpy( largest, name );
}
else if ( std::strcmp( name, smallest ) < 0 )
{
std::strcpy( smallest, name );
}
}
std::cout << largest << " " << smallest << std::endl;
return 0;
}
它的输出可能看起来像
Enter the number of students(1 - 25): 5
Enter the name: ali
Enter the name: hamxa
Enter the name: hassan
Enter the name: anjum
Enter the name: java
java ali
- 无法弄清楚如何使用 c++ 中的链表按从 a 到 z 的顺序显示字母
- 我已经做了一个程序来使用队列链C++表显示学生姓名和身高,现在我想以我不知道如何显示的顺序显示它
- 使用 while 循环显示顺序变量的值
- 以相反的顺序显示内容
- 编写一个递归功能,该功能采用数组并以相反顺序显示元素,而无需在末尾启动数组的索引
- 如何创建跟踪以显示存在递归的调用顺序
- 显示反向顺序,但不显示非反向顺序 c++
- 从桌子状的顺序中显示从循环的值显示值,以使其更清晰和清洁
- 使用 "For Loop" 按以下顺序显示数字
- 链接列表:在C++中按物理和逻辑顺序显示列表
- 隐藏/显示所有窗口并恢复 Z 顺序
- 二进制搜索树顺序树显示
- 如何显示顺序文件的内容
- 为什么该函数以相反的顺序显示十六进制代码
- 为什么 bool 显示正确的位顺序,而直接输出移位运算结果却不显示?
- 按字母顺序显示名称
- 显示程序中静态C++对象的初始化顺序
- 显示链接列表时颠倒顺序
- 在c++中以随机顺序显示5个图像
- C++ 使用指针以相反的顺序显示句子