【求回答】c++编程问题:字符串处理。求各位大侠给编一下呗!多谢!运行成功还有悬赏!!!

1. 问题描述:
对原始无序的姓名列表,进行排序(升序);然后,插入一个同学的姓名,插入后该表仍然有序。(假设姓名不超过50名,每个名字的长度不超过30字符)
2. 问题的解决方案:
程序中输入有序姓名,插入功能及输出姓名都用函数完成。

主要技术问题的描述:
注意,姓名列表可采用二维数组字符数组表示。

#include<iostream>
#include<string>
#include<cstdlib>
using namespace std;
void sort_student(char students[][30],int);
void insert_students(char students[][30],int &);
void input(char students[][30],int&);
void output(char students[][30],int);
void menu();
void select(char students[][30],int&);
int main()
{
char students[50][30];
int number=0;
select(students,number);
return 0;
}
void select(char students[50][30],int &number)
{
int n;
while(1)
{
menu();
cin>>n;
cin.ignore(1000,'\n');
switch(n)
{
case 1:
input(students,number);
break;
case 2:
insert_students(students,number);
cout<<"插入新纪录后的学生列表:"<<endl;
output(students,number);
break;
case 3:
sort_student(students,number);
cout<<"排序后的学生列表:"<<endl;
output(students,number);
break;
case 4:
output(students,number);
break;
case 5:
exit(1);
}
}
}
void input(char students[50][30],int &number)
{
cout<<"请输入学生人数:";
cin>>number;
cin.ignore(1000,'\n');
int i=0;
cout<<"请输入学生姓名:"<<endl;
for(i=0;i<number;i++)
cin.getline(students[i],30,'\n');
}
void output(char students[50][30],int number)
{
int i=0;
for(i=0;i<number;i++)
{
cout<<students[i]<<" ";
if(i%10==9)
cout<<endl;
}
cout<<endl;
}
void sort_student(char students[50][30],int number)
{
int i=0,j=0,k;
char temp[30];
for(i=0;i<number-1;i++)
{
k=i;
for(j=i;j<number;j++)
{
if(strcmp(students[j],students[k])<0)
k=j;
}
if(k!=i)
{
strcpy(temp,students[k]);
strcpy(students[k],students[i]);
strcpy(students[i],temp);
}
}
}
void insert_students(char students[50][30],int &number)
{
int i=0,j=0,k;
char name[30];
cout<<"请输入要插入的学生姓名:";
cin.getline(name,30,'\n');
if(strcmp(students[number-1],name)<0)
strcpy(students[number],name);
else
{
for(i=0;i<number;i++)
{
if(strcmp(students[i],name)>0)
{
k=i;
for(j=number-1;j>=i;j--)
{
strcpy(students[j+1],students[j]);
}
break;
}
}
strcpy(students[k],name);
}
++number;
}
void menu()
{
cout<<"1、输入名字。"<<endl;
cout<<"2、添加名字。"<<endl;
cout<<"3、排序名字。"<<endl;
cout<<"4、输出名字。"<<endl;
cout<<"5、退出。"<<endl;
cout<<"请输入:";
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-06-03
#include<iostream>
#include<string>
using namespace std;

string s[50];
int num;

void show()
{
cout<<"最后的顺序是:"<<endl;
for(int i=0;i<=num;i++)
cout<<s[i]<<endl;
}

void Insert()
{
int k=num-1;
string temp=s[num];
while(temp<=s[k]&&k>=0)
{
s[k+1]=s[k];
k--;
}
s[k+1]=temp;
}

int main()
{
int i,j;
string temp;

cout<<"请输入学生的个数:";
cin>>num;
cout<<"请输入"<<num<<"个学生的姓名:"<<endl;
for(i=0;i<num;i++)
cin>>s[i];
//排序
for(i=0;i<(num-1);i++)
{
for(j=i+1;j<num;j++)
{
if(s[i]>s[j])
{
temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
}
cout<<"请输入插入的学生的姓名:";
cin>>s[num];
Insert();
show();
return 0;
}
我这有电子版的文件,还有设计报告,加我给你、、本回答被提问者采纳
第2个回答  2012-05-19
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char name[50][40]={"a","abc","123"};
int n=3;
int find(const char *a)
{
int i;
for(i=0;i<n;i++)
if(!strcmp(a,name[i]))return i;
return -1;
}
int cmp(const void *a,const void *b)
{
return strcmp((const char*)a,(const char*)b);
}
void sort()
{
qsort(name,n,sizeof(*name),cmp);
}
int menu()
{
char ch;
printf("\n");
printf("----------\n");
printf("1.添加名字\n");
printf("2.删除名字\n");
printf("3.显示名字\n");
printf("4.退出\n");
printf("----------\n");
ch = getchar();
if(ch!='\n')while(getchar()!='\n');
//fflush(stdin);
return ch;
}
void add()
{
char s[40];
if(n>=50){
puts("full");
return;
}
gets(s);
if(strlen(s)>30){
puts("too long");
return;
}
if(find(s)<0){
strcpy(name[n],s);
n++;
sort();
}else{
puts("already exist");
}
}
void del()
{
char s[40];
int i;
gets(s);
i=find(s);
if(i<0){
puts("not found");
}else{
strcpy(name[i],name[n-1]);
n--;
sort();
}
}
void show()
{
int i;
puts("名字");
puts("----------");
for(i=0;i<n;i++)
{
puts(name[i]);
}
puts("----------");
}
int main()
{
sort();
while(1){
system("cls");
switch(menu()){
case '1':add();break;
case '3':show();break;
case '2':del();break;
case '4':exit(0);break;
default:continue;break;
}
system("pause");
}
return 0;
}
第3个回答  2012-05-18
#include<iostream>
#include<string>
using namespace std;

string s[50];
int num;

void show()
{
cout<<"最后的顺序是:"<<endl;
for(int i=0;i<=num;i++)
cout<<s[i]<<endl;
}

void Insert()
{
int k=num-1;
string temp=s[num];
while(temp<=s[k]&&k>=0)
{
s[k+1]=s[k];
k--;
}
s[k+1]=temp;
}

int main()
{
int i,j;
string temp;

cout<<"请输入学生的个数:";
cin>>num;
cout<<"请输入"<<num<<"个学生的姓名:"<<endl;
for(i=0;i<num;i++)
cin>>s[i];
//排序
for(i=0;i<(num-1);i++)
{
for(j=i+1;j<num;j++)
{
if(s[i]>s[j])
{
temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
}
cout<<"请输入插入的学生的姓名:";
cin>>s[num];
Insert();
show();
return 0;
}
第4个回答  2012-05-19
c++编程问题,为什么不用STL。。。 自己百度。

几行就能解决问题。或者你想自己写。
相似回答
大家正在搜