注册 登录
编程论坛 C++教室

id 是int 还是 string?

专业课的小白 发布于 2020-04-05 16:09, 4975 次点击
定义一个学生类,其中有3个数据成员:学号、姓名、年龄,构造函数,display函数。同时编写main函数使用这个类,实现对学生数据的赋值和输出。
提示:与例题9-1的Time类似,只是时分秒变为学生信息,数据类型变为string类型.



这是老师布置的课后习题,我做出来了,但是没有按照老师的提示,我在网上搜的答案,都是用了string,在定义的时候还定义了数组。
下面是自己写的,还请路过的朋友多多提出自己的想法。
#include<iostream>
using namespace std;
class Student
{
public:
    Student()
    {
        num=0;
        name=0;
        age=0;
    }
    void set()
    {
        cin>>num;
        cin>>name;
        cin>>age;
    }
    void display()
    {
        cout<<"学号:"<<num<<endl;
        cout<<"姓名:"<<name<<endl;
        cout<<"年龄:"<<age<<endl;
    }
private:
    int num;
    char name;
    int age;
};
void  main()
{
    Student t;
    t.set();
    t.display();
}


10 回复
#2
叶纤2020-04-05 16:29
我没学到类,不过进来了不说自己的看法有点不礼貌,
1 既然是做学生类,说明会有很多成员,建议做成数组形式
2 建议根据c++标准来,c++不支持void main
3 既然选择了用类做,感觉这不像cpp的写法,有点像c的
当然我也是新手,有说的不对的地方先说一下抱歉
#3
叶纤2020-04-05 16:34
还有您说的Id是学号吗?
如果是学号的话我会用字符串
#4
专业课的小白2020-04-05 16:49
回复 2楼 叶纤
对于用void main 还是int main 等等的,我一直都不太懂,捉摸不定。
还有您刚刚说的,有点像c的写法,我学的确实不够到位。我也只能浅浅的觉得c和c++在形式上的最大的不同就是cin和cout了。
所以还希望多多指出我的不足,如果不麻烦的话,再讲解一下。



就是学号。因为是数字嘛,所以我一开始先想到的是int ,没有想到string,额,,对于string ,我也是有些混沌。
#5
叶纤2020-04-05 16:58

突然感觉我之前发的一个问题贴和你这个有点类似,不过是用结构体做的,你可以改改

程序代码:

#include <iostream>
#include <vector>
#include <string_view>
#include <array>
#include <algorithm>
using namespace std;

struct Man
{
    std::string_view a;
    int grad;
};

struct arrayW
{
    vector<Man>arra;
};

bool strnum( const Man& str)
{
    return (str.a.find("jk") != std::string_view::npos);
}

int main()
{
    arrayW arrau;
    arrau.arra.resize(3);
    arrau.arra[0] = { " kjk",67 };
    arrau.arra[1] = { " dfd",671 };
    arrau.arra[2] = { " fdd",673 };

    for (auto tem : arrau.arra)
    {
        cout << " " << tem.a << " " << tem.grad << endl;
    }
    auto found = find_if(arrau.arra.begin(),arrau.arra.end(),strnum);
    auto countnum = count_if(arrau.arra.begin(),arrau.arra.end(),strnum);
    if (found == arrau.arra.end())
    {
        cout << "未识别";
    }
    else
    {
        cout << found->a << endl;
        cout << countnum << endl;
    }
}

#6
lin51616782020-04-05 17:09
看法是你写错
姓名不可能用一个字符就能存
#7
雪影辰风2020-04-05 17:18
回复 4楼 专业课的小白
如果你的学生ID是包含字母的,那就用string,如果不包含字母,建议用int,因为int型变量操作起来比较方便,效率高;
比如说,你要判断一个ID
示例代码:
    if(id==1809) {};
这个id是int型的,实际上计算机只需要比较每一个二进制位就行了,而:
    if(id=="1809") {};
这样的话,计算机会逐个进行比较,若id长度过长,就会导致超时等问题

然后就是main函数类型问题,在C语言里面,main函数是可以用作void型的,但C++开始,就不支持void型了,只能用int型(C++编程标准)
还有就是string,其实string不是一个变量类型,你在输入的时候也会发现,你定义string变量时,IDE不会高亮显示string(或者说高亮颜色与int等不一样),因为string是一个类
再者就是C与C++的区别,根据名称是可以知道,C++是C的升级版,C++中引入了很多东西,像命名空间、类、新的标准输入输出(即为cin和cout,这个标准输入输出流是很智能的,它几乎能打印出所有类型的值或变量,但因功能丰富,实际效率会低于scanf和printf)等
#8
专业课的小白2020-04-09 15:14
回复 7楼 雪影辰风
谢谢,满满的干货已收到。
#9
d7se1232020-04-10 14:42
如果是纯数字用int
string 可以表示0001 这样的字符串 是int表示不了的
#10
LLU2020-04-16 21:38
我觉得还是在主函数里面定义一个数组,因为不可能仅仅收集一两个学生的信息
  Student.t[100]
  for(i=1;i<n;i++)// 这里需要自己定义
{ cout<<"enter num name sex:"<<endl;
        cin>>a>>b>>c;
        t.[i]=Student(a,b,c);
        t.[i]->display();
}
  
#11
楚煜2020-04-25 17:15
如果ID含字母就是用string,无字母,只有数字:数字长的话用long long,不长可以用int。
1