gpt4 book ai didi

c++ - C 中的目录排序

转载 作者:行者123 更新时间:2023-11-30 21:39:48 24 4
gpt4 key购买 nike

我不知道如何执行以下操作...

修改insertion()函数,将新的人物插入到按人物名字排序的目录中。

#include <stdio.h>   
#include <string.h>
#include <ctype.h>
#pragma warning(disable: 4996)
#define max 100
typedef enum { diploma, bachelor, master, doctor } education;

const char* getDegreeName(enum education degree){
switch (degree){

case diploma: return "diploma";
break;
case bachelor: return "bachelor";
break;
case master: return "master";
break;
case doctor: return"doctor";
break;

}
}

struct person { // a node to hold personal details
char name[30];
char email[30];
int phone;
education degree;
};

struct person directory[max]; // an array of structures, 100 entries
int tail = 0; // global variable
int i = 0;
int z = 0;
char temp[30];


void flush(); // forward declaration of functions
void branching(char c);
int insertion();
int print_person(int i);
int print_all();
int search_person();
int delete_person();


int main() { // print a menu for selection
char ch = 'i';

ungetc('\n', stdin); // inject the newline character into input buffer

do {
printf("Enter your selection\n");
printf("\ti: insert a new entry\n");
printf("\td: delete an entry\n");
printf("\ts: search an entry\n");
printf("\tp: print all entries\n");
printf("\tq: quit \n");

flush(); // flush the input buffer. To be discussed later
ch = tolower(getchar());
branching(ch);
} while (ch != 113);

return 0;
}

void flush() { // flush the input buffer. To be discussed later
int c;
do {
c = getchar();
} while (c != '\n' && c != EOF);
}


void branching(char c) { // branch to different tasks
switch (c) {
case 'i':
insertion();
break;
case 's':
search_person();
break;
case 'd':
delete_person();
break;
case 'p':
print_all();
break;
case 'q':
break;
default:
printf("Invalid input\n");
}
}

int insertion() { // insert a new entry at the end
if (tail == max) {
printf("There are no more places to insert.\n");
return -1;
}
else {
printf("Enter name, phone, email:\n");
printf("Enter 0 for diploma, 1 for bachlor, 2 for master and 3 for doctor\n");
scanf("%s", directory[tail].name);
scanf("%d", &directory[tail].phone, sizeof(directory[tail].phone));
scanf("%s", directory[tail].email);
scanf("%d", &directory[tail].degree); //sacaning the degree

tail++;
printf("The number of entries = %d\n", tail);
return 0;
}
}

int print_person(int i) {
// print all information one person in the directory
printf("\n\nname = %s\n", directory[i].name);
printf("email = %s\n", directory[i].email);
printf("phone = %d\n", directory[i].phone);
printf("degree = %s\n", getDegreeName(directory[i].degree));
return 0;
}

int print_all() {
// print all information each person in the contactbook
int i;

if (tail == 0) {
printf("No entries found.");
}
else {
for (i = 0; i < tail; i++) {
print_person(i);
}
}

return 0;
}

int search_person() { // print phone and email via name
char sname[30]; int i;

printf("Please enter the name to be searched for:\n");
scanf("%s", sname); //sname is an array, no & needed

for (i = 0; i<tail; i++)
if (strcmp(sname, directory[i].name) == 0) {
print_person(i);
return i;
}

printf("The name does not exist.\n");
return -1;
}
int delete_person() {
int i, k;
k = search_person();
if (k == -1) {
printf("The name does not exist.\n"); return -1;
}
else {
for (i = k; i<tail; i++) {
strcpy(directory[i].name, directory[i + 1].name);
directory[i].phone = directory[i + 1].phone;
strcpy(directory[i].email, directory[i + 1].email);
printf("The index deleted is: %d\n", k);
}
tail--;
return k;
}
}

最佳答案

int insertion()
{
if (tail == max)
{
printf("There are no more places to insert.\n");
return -1;
}
return doInsertion();
}

int doInsertion() {

bool done = false;
char name[30];
char email[30];
double phone = 0;
double degree = 0;
int i = 0;
struct person toadd;
struct person tmpdirectory[tail+1];

// Ask user for input
printf("Enter name, phone, email:\n");
printf("Enter 0 for diploma, 1 for bachlor, 2 for master and 3 for doctor\n");

// Get user input
scanf("%s", name, sizeof(name));
scanf("%d", phone);
scanf("%s", sizeof(email));
scanf("%d", degree);

toadd.name = name;
toadd.phone = phone;
toadd.email = email;
toadd.degree = degree;

// Loop for over the length of the current array
for(; i < tail ; ++i)
{
// Check if the new item is alphabetically before the next item
if(strcmp(name, directory[i].name) < 0)
{
// Insert the new item and break the loop
tmpdirectory[i] = toadd;
done = true;
break;
}

// Copy over a item and keep looking for the insert spot
tmpdirectory[i] = directory[i];
}

// If we haven’t inserted yet its the last item in the list
if(done == false)
{
tmpdirectory[i] = toadd;
}
// otherwise we need to copy over the remaining items in the list
else
{
for(; i < tail ; ++i)
{
tmpdirectory[i+1]; = directory[i];
}
}

// increase list count
++tail;

// copy the struct
struct person dictionary[tail];
directory = tmpdirectory;

printf("The number of entries = %d\n", tail);
return 0;
}

关于c++ - C 中的目录排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28512021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com