【问题标题】:C++ Converting Different Types to String TemporarilyC ++临时将不同类型转换为字符串
【发布时间】:2015-10-21 09:24:39
【问题描述】:

如果这个问题有点啰嗦,我深表歉意。我会尽量保持简短但简洁。

我正在为入门级 C++ 课程构建一个主要程序,我正在为仓库创建一个模拟版本的员工管理。一般的形式是要求用户输入以选择员工类型,然后根据输入要求输入与该员工类型相关的员工详细信息。

因此,有些函数接受 int、float、string 和 char 形式的输入。我有一个单独的较小的函数来检查“退出”作为输入,如果这是真的退出程序。我目前有这样的设计,以便所有输入都被归类为字符串,但这显然会导致稍后当我尝试将数值等同起来时出现问题。

这是我当前版本的检查功能和用户输入功能之一:

//Current add_employee function
void add_employee()
{
        string emp_type = "";
        bool exit_check;
        cout << "Please select employee type. Enter 1 for Manager or 2 for Dockhand." << endl;
        getline(cin, emp_type);
        if(name.empty())
        {
                cout << "Cannot accept empty field as input. Please answer with 1 for Manager, or 2 for Dockhand." << endl;
                add_employee();
        }
        exit_check = check_input(emp_type);
        if(exit_check == true)
        {
                return;
        }
        if(emp_type == "1")
        {
                add_manager;
        }
        else if(emp_type == "2")
        {
                add_dockhand;
        }
        else
        {
                cout << "Sorry. Your input is invalid. Please answer with 1 for Manager, or 2 for Dockhand." << endl;
                add_employee();
        }
}

//Current check function
bool check_input(string input_var)
{
        if(input_var == "exit")
        {
                return true;
        }
        else
        {
                return false;
        }
}

至于我的问题。有没有一种相对简单的方法来保持我的代码结构,将输入作为 int,然后将其转换为字符串以检查“退出”,但如果 exit_check 为假,输入仍被视为 int?我正在考虑将输入分配给两个变量,但这感觉像是在浪费代码。

请让我知道是否有意义,我会将其编辑到 OP 中。

【问题讨论】:

  • 不太清楚你的意思是什么?整个程序远不止这些,但是当两个函数足以说明我的意思时,将所有这些复制到问题中是没有意义的。
  • 为什么要使用字符串来检查员工类型?您可以直接比较 int 类型并为退出分配一个特定的整数。
  • @Raul 这就是我最初的设计,但后来我无法获得 check_input 函数来检查输入的“退出”。我试图设置它,以便在每个输入阶段之后都可以使用 check_input 函数,这样我就不必每次都复制代码。并非所有用户输入都属于同一类型。

标签: c++ string getline


【解决方案1】:

getline(cin, emp_type);将从用户那里获取一个字符串。在该代码的任何地方,您都没有将 int 作为输入。

你可以通过改变来简化:

 exit_check = check_input(emp_type);
        if(exit_check == true)
        {
                return;
        }

if(emp_type.compare("exit") == 0)
            {
                    return;
            }

检查字符串是否相等。 (有关该运算符的详细信息,请参阅compare()。)并删除 check_input 函数。

如果您需要输入中的 int,那么 zenith 几乎涵盖了如何做到这一点。

【讨论】:

  • 所以我基本上会接受所有输入作为字符串,比较它们以退出,使用 if(name.empty()) 检查空字段,然后将输入转换为 int?只是检查我是否理解这个过程。是否也可以将字符串转换为 char 或 float ?我必须在需要这些类型的其他函数中执行相同的过程。
  • 或者更简单:emp_type == "exit" 而不是 emp_type.compare("exit") == 0
  • @DwayneH 是的,为什么不呢。 input.at(0) 将获得第一个字符,std::stof 用于浮点转换。请记住,用户输入始终是一个字符串,只有通过解析该字符串,您才能获得以这种文本格式表示的数值。
  • @zenith 太完美了。非常感谢你们俩。我可能仍将退出检查保留为一个单独的小函数,这样我就不必每次都编写相同的内容,因为可能会有大量用户输入。
【解决方案2】:

将输入作为int,然后将其转换为字符串以检查'exit'

那是不可能的。如果您将输入读入 int,任何非数字输入都会失败,并且您将无法检查字符串 'exit'。

您可以做的是将输入作为字符串传递给变量,例如 input,然后使用 stoi 将其转换为 int:

int emp_type = std::stoi(input);

顺便说一句,您可能希望通过引用获取check_input 的参数,以避免每次调用函数时都复制整个字符串:

bool check_input(string const& input_var)

【讨论】:

    猜你喜欢
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多