C++程序。要求输入姓名,输出各个姓的人数和最大的姓。

作者&投稿:从哄 (若有异议请与网页底部的电邮联系)
C++ 编写程序,统计某旅馆住宿的客人总数.要求输入客人的姓名,输出客人的编号(按先后顺序自动生成)~

#include
#include
using namespace std;
class Hotel{
private:
static int num;
static int total;
char *name;
public:
void add(char *a);//
void print();//
static int getTotal(){
return total;
}//
char *getName();
};
void Hotel::add(char *na)
{
name = new char[strlen(na) + 1];
strcpy(name,na);
total++;
}
char *Hotel::getName(){
return name;
}

void Hotel::print(){
cout<<name<<" "<<getTotal()<<endl;
}

int Hotel::total=0;

int main(){
Hotel h[100];
h[0].add("Susan");
h[1].add("Peter");
h[2].add("John");
h[3].add("Mary");
h[4].add("Alice");
string name;
cin>>name;

for(int i=0;i<Hotel::getTotal();i++)
{
if(h[i].getName()==name)
{
cout<<i+1<<" ";
h[i].print();
break;
}
}
return 0;
}

要使用string,请先用using namespace声明,
注意string是包含在std里的,故如果只用string只用定义为:
using std::string。
具体代码:
//以下开始#include#includeusing namespace std;int main(){cout <<"welcome to this page!
";
string name;
cout << "please enter you name:";
cin >> name;
cout <<"welcome!" << name << endl;//不能输出空格的return 0;
}

扩展资料:
所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。和是不一样,前者没有后缀,实际上,二者是两个文件,打开文件就会发现,里面的代码是不一样的。
c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h.因为标准库非常的庞大,所程序员在选择的类的名称或函数名时就很有可能和标准库中的某个名字相同。
所以为了避免这种情况所造成的名字冲突,就把标准 库中的一切都被放在名字空间std中。但这又有一个问题。无数原有的C++代码都依赖于使用了多年的伪标准库中的功能,他们都是在全局空间下的。 就有了和等这样的头文件,一个是为了兼容以前的C++代码,一个是为了支持新的标准回复。

#include <cstring>
#include <iostream>
using namespace std;
//做一个通用的链表
struct TLink {
void * data;
struct TLink * next;
};
//链表函数:追加元素
void Append(TLink ** root, void * data)
{
TLink * n = new TLink;
n->data = data;
n->next = *root;
*root = n;
}//end Append

//链表函数:搜索。注意第二个参数是一个函数指针,用户可以自定义比较程序
void * Search(TLink * root, int (*match)(void *, void *), void * key)
{
if(!root || !match || !key) return 0;
TLink * r = root;
while(r) {
if (!(*match)(r->data , key)) return r->data ;
r = r->next ;
}//end while
return 0;
}//end Search

//姓氏结构体
struct FamilyName {
char name[3];
int count;
}; //end FamilyName

//比较两个姓氏结构体变量的函数
int cmpFamilyNames(void * a, void * b)
{
FamilyName * x = (FamilyName*)a;
FamilyName * y = (FamilyName*)b;
return strcmp(x->name , y->name );
}//end cmpFamilyNames

//比较两个姓名的函数
int cmpNames(void * a, void * b)
{
return strcmp((char*)a, (char*)b);
}//end cmpNames

//打印花名册并统计
void Report(TLink * fns, TLink * ns)
{
if(!fns||!ns) return ;
TLink * f = fns; TLink * n = ns;
char * name = 0; FamilyName * fn = 0, * fm = 0;
int max = 0;
cout << endl << "------------------" <<endl;
cout << "花名册";
cout << endl << "------------------" <<endl;
while(n) {
name = (char*) n->data ;
cout << name << '\t';
n = n->next ;
}//end while
cout << endl << "------------------" <<endl;
while(f) {
fn = (FamilyName*)f->data ;
cout << fn->name << '(' << fn->count << ")\t";
if(fn->count > max) {
max = fn->count ;
fm = fn;
}//end if
f = f->next ;
}//end while
cout << endl << "------------------" <<endl;
cout << "最大姓氏:" << fm->name << '(' << fn->count << ')';
cout << endl << "------------------" <<endl;
}//end Report

int main(void)
{
char Name[10];
FamilyName * fn =0, t; char * n = 0;
TLink * fns = 0, * ns = 0;
for(;;) {
cout << "请输入学生姓名(输入exit结束程序,输入report进行统计):";
cin >> Name;
if(strstr(Name, "exit")) break;
if(strstr(Name, "report")) {
Report(fns, ns);
continue;
}//end if
//使用链表前要检索是否存在记录,不要存储冗余记录
n = (char*)Search(ns, &cmpNames, Name);
if(n) continue;
//如果出现新名字则存入记录
n = new char[10];
strcpy(n, Name);
Append(&ns, n);

//在姓氏链表中查询该姓氏
t.name[0] = Name[0]; t.name[1] = Name[1]; t.name[2] = 0;
fn = (FamilyName*)Search(fns, &cmpFamilyNames, &t);
if(fn) { //如果有该姓氏则记录+1
fn->count ++;
}else{ //否则在姓氏链表中追加一条记录
fn = new FamilyName;
fn->name[0] = Name[0]; fn->name[1] = Name[1]; fn->name[2] = 0;
fn->count = 1;
Append(&fns, fn);
}//end if
}//next
return 0;
}
/*运行结果样本:

------------------
花名册
------------------
丁宇红 胡广 赵国荣 孙珺 单滤斌 杨志刚 宫照华 姚胜宽 张波 兰敏
胡永超 姚仁修 管廷来 陈新民 谢皇尚 李站长 张丽荣 吴斌 王川红 于东升
王进 吴晓佩 陈雪辉 张希亮 张桂梅 刘强 马腾 孙海滢 房培阳 徐建
孙永晨 孙圣舜 丁有进 郑斌 刘洋 徐刚 薛继雷 金民 刘昭峰 张立辉
程华应 万永峰 司方来 姚文文 王立功 郭良 吴敏 兰芳 宋宇 张继海
姜锦余 刘太强 石玉伟 王科 刘庆峰 王建利 李云霞 刘磊 李林 李红波
张玉权 刘彦 赵富明 赵逢钦 李红涛 李瑞富 刘义生 周浩 徐波 魏鹏远
刘翠立 吕相辉 丁磊 王俊 王涛 安平 赵永坤 丁乐朋 崔铁成 仲杰
刘少雨 臧玉江 马晓刚 秦波 王晓伟 马国政 程旻 姜颂禹 褚为耕 黄汝存
华玉文 郭文 朱勇 窦胜利 董洪顺 刘鸿林 许化栋 藏军 于修路 吴振东
王镭 王雪 高淑英 王海涛 潭洪利 牟卫国 胡立群 李 鹏 刘祝新 汪志广
邵巍 张兆水 赵宇鲁 阮怀建 李保军 马子宾 郭勇 朱月明 于波 吕建祥
管霞 卢军 张巾莹 周冰 于振宁 张茂相 位莅 韩佑臻 魏建华 周明
王文亮 刘红 张东 刘坚 任树林 张渲 盛华武 罗勇 胡斌 朱啸
李晓祺 范加庆 张文晶 祁文弟 郭晓宁 孙平玉 李东林 张红彬 唐廷慧 王鹏
张军 栾红伟 乔树涛 丛培春 张培养 张建强
------------------
单(1) 杨(1) 宫(1) 谢(1) 陈(2) 房(1) 郑(1) 薛(1) 金(1) 万(1)
司(1) 姚(3) 兰(2) 宋(1) 石(1) 徐(3) 安(1) 丁(4) 崔(1) 仲(1)
臧(1) 秦(1) 程(2) 姜(2) 褚(1) 黄(1) 华(1) 窦(1) 董(1) 许(1)
藏(1) 吴(4) 高(1) 潭(1) 牟(1) 汪(1) 邵(1) 赵(5) 阮(1) 马(4)
吕(2) 管(2) 卢(1) 于(4) 位(1) 韩(1) 魏(2) 周(3) 刘(14) 任(1)
盛(1) 罗(1) 胡(4) 朱(3) 范(1) 祁(1) 郭(4) 孙(5) 李(10) 唐(1)
王(13) 栾(1) 乔(1) 丛(1) 张(17)
------------------
最大姓氏:张(17)
------------------
请输入学生姓名(输入exit结束程序,输入report进行统计):exit
*/

#include <iostream>
#include <vector>
using namespace std;
struct fn
{
char name[3];
int count;
};

const int N=4;
vector<fn>firstName;

int findMaxCount();
void inputfullName(char [][10]);
void inputFirstName(char [][10]);

void main()
{
int x;

char fullName[N][10];

inputfullName(fullName);
inputFirstName(fullName);
cout<<firstName.size()<<endl;
for (int m=0;m<firstName.size();m++){
cout<<firstName[m].name<<" "<<firstName[m].count<<"人"<<endl;
}
x=findMaxCount();
cout<<"姓最多的是:"<<firstName[x].name<<" "<<firstName[x].count<<"人";

}

void inputfullName(char name[][10] ){

for (int i=0;i<N;i++)
{
cout<<"输入第"<<i+1<<"人的全名"<<endl;
cin>>name[i];
}

}

void inputFirstName(char name[][10] ){

fn temp;
for (int i=0;i<2;i++)
{
temp.name[i]=name[0][i];
}
temp.count=1;
firstName.push_back(temp);

for(int j=1;j<N;j++)
{
temp.count=1;

for ( i=0;i<2;i++)
{
temp.name[i]=name[j][i];
}
for (int m=0;m<firstName.size();m++)
{
if(*(temp.name)==*(firstName[m].name))
{
firstName[m].count+=1;
temp.count=-1;
}
}
if(temp.count!=-1){

firstName.push_back(temp);
}

}
}

int findMaxCount(){

int temp=0;
int j;
for(int i=0;i<firstName.size();i++)
{
if(temp<firstName[i].count){

temp=firstName[i].count;
j=i;
}

}
return j;

}


编写一个程序,要求用户输入两个整数,判定一个能否整除另一个,怎么写...
算法:判断能否整除<==>等价于余数是否为0,在c语言中用%取模运算来求得余数 代码:include <stdio.h>int main(){ int a, b; printf("请输入a,b(逗号分开):"); scanf("%d,%d", &a, &b); if (a % b == 0) { \/\/a%b得到的是余数,余数为0则能整除 printf("...

C++ \/\/要求编写一个程序运行时提示输入一个数字,再把这个数字显示出来...
include<iostream> int main(){ \/\/要求编写一个程序运行时提示输入一个数字,再把这个数字显示出来。int a;std::cout<<"请输入一个数字: ";\/\/代码中输入了中文的分号 std::cin>>a;return a; \/\/要显示不是使用 return a; 要改成 std::cout << a << endl; return 0;} ...

求大神来一个JAVA程序,要求键盘输入两个整数,并输出这两个整数间的所 ...
package com.test;import java.util.Scanner;public class Test { public static void main(String[] args) { Scanner sole = new Scanner(System.in);int n1=0;int n2 =0;System.out.println("请输入第1个整数.");n1 = sole.nextInt();System.out.println("请输入第2个整数.");n2 = ...

c++环境下,编辑.c程序,要求输入数字,显示出来,若输入的是其他字符,提示...
i]!='\\0'){ if (str[i]>='0' && str[i]<='9') \/*判断输入的值是否为数字*\/ i++;else { tag=0; \/*tag=0表示输入的数据不是数字*\/ break;} } if (tag)printf("%s\\n",str);else printf("输入非法数字\\n");system("pause");return 0;} 程序运行结果如下 ...

编写一段vb程序 要求:输入两个任意数后输出较大数
Private Sub Command1_Click()Dim n As Single, m As Single n = InputBox("数据1", "输入", "100")m = InputBox("数据2", "输入", "100")Me.Cls Print "数据1="; n; "数据2="; m If n > m Then Print "较大数据为:"; n Else Print "较大数据为:"; m End If End...

用C语言编写一段程序,要求:输入一段字符,分别统计出其中的英文字母、空...
你好!给你一个程序,你试试吧,有问题再问 include <stdio.h>#include <string.h>main(){char c[20];int i=0,j=0,k=0,l=0,h=0;printf("请输入一个字符串:");gets(c); for(i=0;i<=strlen(c);i++){if(c[i]>='0'&&c[i]<='9')j++;if((c[i]>='a'&&c[i]<=...

编写一个程序,要求能够输入任意多个数字,然后输出这些数字中的最大...
1、使用C++实现:用c++ vector容器,可以随意输入多个数字,每次push_back即可 或者看这个代码 \/ min_max.cpp 对用户输入的任意一组序列,计算其最大值和最小值 并不是用vector这类容器存储整个序列中的数据 思想:定义min,max,用输入序列的第一个元素初始化 若输入流中元素小于min,则用该值替换...

...写一个很简单的程序,输入两个整数a,b,要求输入a-b的值,例如:输入7...
include<stdio.h> main(){ int a,b;printf("请输入A和B:");scanf("%d%d",&a&b);printf("a-b的差为:%d",a-b);}

C#编写一个程序.要求从键盘输入十个双精度实数然后输出它们中的最大...
做法不唯一 仅供参考 double[] aar = new double[10]; int i = 0, j = 0; double t=0;while (i < 10){ aar[i] = double.Parse(Console.ReadLine()); i++; } while (j<9){ i = j + 1;while (i < 10){ if (aar[j] < aar[i]){ t = aar[j]; aar[j] = aar...

c语言求高手解答,让程序要求用户输入一个大写字母,使用嵌套循环产生下 ...
双重循环 include <stdio.h>#include<stdlib.h> void PrintPyramid(char c); main(){ char n; printf("Please input a capital:\\n"); scanf("%c",&n); PrintPyramid(n); system("pause"); } \/\/函数功能:输出金字塔 void PrintPyramid(char c) { int i=65 , j...

林芝县17731456465: c++需要把几个名字输入在显示怎么做
支饲和合: 简单示例代码如下: #include<iostream> using namespace std; int main() { string name; //定义一个字符串变量 cin>>name; //输入姓名 cout<name<<endl; //输出姓名 return 0; }

林芝县17731456465: 编写一个程序,输入学生姓名和分数.输出以下部分数据 -
支饲和合: 可以将学生姓名和成绩的下标联系在一起,下标一样的姓名和数据表示的就是一个人. 程序代码如下: #include<iostream.h> #include<string.h> #include<stdio.h> void main() {char name[30][10];float score[30];float ave;int n;int i, j; cout<<"...

林芝县17731456465: 用c++编写一个程序,已有若干个学生数据,包括学号 姓名 成绩,要求输出这些学生数据并计算平均值 -
支饲和合: #include <iostream.h> #include <stdlib.h>class student { public:int no;char *name;int deg;student();~student();void display(); };static int sum,num=3; static int avg(int sum);void main() {int aver;student stu[3];stu[0].no=1;stu[0].name="li...

林芝县17731456465: 用C++编写一个程序 : 输入10个学生的姓名、学号和成绩,将其中不及格的姓名、学号和成绩输出 -
支饲和合: #include#include void main() { string name[10]; int grade[10]; string number[10]; for(int i=0;i{ cin>>name[i]; cin>>grade[i]; cin>>number[i]; } for(intj=0;j{ if(grade[j]cout} }

林芝县17731456465: C++编写一个程序,该程序提示用户输入学生姓名和分数.(假定每个班级最多30个学生.)输出以下部分数据 -
支饲和合: #include<iostream> using namespace std; struct info { float mark; string name; }; void input(info a[], int num) { for(int i = 1; i <= num; i++) { cout << "please input mark: "; cin >> a[i].mark; cout << "please input name: "; cin >> a[i].name; } } float ...

林芝县17731456465: 用C++编写一个程序,已有若干个学生数据(学号、姓名、成绩)要求输出这些学生的信息以及他们总的平均分. -
支饲和合: #include class student { public: int no; char *name; int deg; student(); ~student(); void display(); }; static int sum,num=3; static int avg(int sum); void main() { int aver; student stu[3]; stu[0].no=1; stu[0].name="li"; stu[0].deg=89; stu[1].no=2; stu[1]....

林芝县17731456465: 想写一个简单的C++程序,由用户输入姓名(一个字符串)然后输出欢迎信息.这里姓名用什么来存储呢? -
支饲和合: 要使用string,请先用using namespace声明 注意string是包含在std里的.故如果只用string只用定义为 using std::string;//以下开始 #include #include using namespace std; int main() { cout <<"welcome to this page!\n"; string name; cout << "please enter you name:"; cin >> name; cout <<"welcome!" << name << endl;//不能输出空格的 return 0; }

林芝县17731456465: 用VC++编写一个程序,输入5个学生的姓名及分数,输出班级平均分,低于平均分姓名和分数,最高分及姓名. -
支饲和合: #include "stdafx.h" int avergeScore(int nScore[]); void lowerAvergeScore(int nAvergeScore, int nScore[], char (*cName)[20]); void higestScore(int nScore[]); int _tmain(int argc, _TCHAR* argv[]) { char cName[5][20] = {0}; int nScore[5] = {0}; for(int ...

林芝县17731456465: 如何用C++编程连续打出自己的名字三次,要求是c++程序 -
支饲和合: #include<iostream>#include<string> using namespace std; int main() { string name; cout<<"input your name" << endl; cin>>name; for(int i=0;i!=3;i++); { cout << name <<endl; } return 0; } 手机未运行,大致如此,别复制因为可能有中文符号,照着打.希望可以帮到你

林芝县17731456465: 怎么用C++设计一个输入一个名字对应输出另一个名字的小程?怎么用
支饲和合: while(TRUE) { int i=getchar() switch(i) { case '1': cout

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网