检查号码是否以某个数字开头

时间:2017-08-24 10:22:35

标签: c++ function class inheritance

我的问题是如何检查本科生的学生编号是否以数字5开头,而毕业生的学生编号是否以9开头。

条件如下: 对于本科生,初始注册费为R500,对于研究生,初始注册费为R600。对于本科课程,费用为每个模块R1100,研究生课程费用为每个模块R2000。

我已经设置了我的类和我的主要外观如下,但我不确定在主要或我的实现文件中应该在哪里进行条件检查?

    //Application
    #include "Student.h"
    #include "PostGradStudent.h"
    #include <iostream>

   using namespace std;

   int main()
   {
        double regFee, modFee, addFee;

        PostGradStudent thePostGradStudent(1, 2, 3, 54321012, "Rohan", 2, "Hole-In-One avenue", "BSc", "Thesis");
        thePostGradStudent.displayInfo();

        return 0;
    }

以下是我进行计算的地方,但这里我不明白如何将正确的值发送给main?

    double PostGradStudent::calcFee() //calculate the total fees(registration fee + module fees + any additional fee) for a student
    {
        return regFee + modFee + addFee;
    }

    void PostGradStudent::displayInfo()
    {
        cout.setf(ios::showpoint);
        cout.setf(ios::fixed);
        cout << "Details for the student" << endl
             << "Student Number: " << get_studentNumber() << endl
             << "Student Name: " << get_studentName() << endl
             << "Number of Modules: " << get_noModules() << endl
             << "Address: " << get_address() << endl
             << "Degree: " << get_degree() << endl
             << "Total cost of fees: R" << setprecision(2) << calcFee() << endl
             << "Dissertation: " << get_dissertation() << endl;

}

我在运行以下应用程序时附上了截图: Output

非常感谢这方面的协助。

谢谢 罗汉

2 个答案:

答案 0 :(得分:0)

如果n是您的号码并且是一个整数类型,那么

while (n < -9 || n > 9) n /= 10;

n转换为第一个数字。如果您不支持n < -9 || signed,请删除n部分。

这也具有0不变的整洁属性。

以数字方式执行此操作比转换为std::string要快,但如果您基本上使用字符串(在我看来,至少学生编号不是您想要执行算术运算的东西),然后使用substr&amp; c。

答案 1 :(得分:0)

有了数字,您可以使用std::to_string函数将其转换为字符串。如果您使用的是不支持C ++ 11的编译器,请尝试查看itoa函数。

转换完成后,只需使用string运算符检查指定的char[][]项即可。

由于@ muXXmit2X表示std::ostringstream也可用于转换。 实际的解决方案选择取决于您的要求的详细信息。

示例实施:

// check if the 'value' has digit '2' set in the hundreds pos
// assumption: there are at least 3 digits
uint32_t value = 21245;
char check = '2';

// substr
std::string text = std::to_string(value);
bool isTrue1 = text.substr(text.size()-3, 1) == std::string(1, check); // true
bool isTrue2 = text[text.size()-3] == check; // true

// itoa
char buffer[10];
itoa(value, buffer, 10);
bool isTrue3 = buffer[strlen(buffer)-3] == check; // true

// numerical
bool isTrue4 = (value / 100 % 10) == 2; // true