【问题标题】:How to convert string to int in c++?如何在 C++ 中将字符串转换为 int?
【发布时间】:2016-08-12 01:20:48
【问题描述】:

我正在创建一个电话注册程序来检查输入的电话号码是否有效。我曾多次尝试搜索谷歌,并弄清楚如何检查电话号码长度以及它是否以“04”开头;似乎没有什么可以检查字符串是否可以转换为无符号整数而没有错误。我当前的代码是:

bool Is_Valid(string phone) {
if (phone.length() == 10 && phone.substr(0,2) == "04") {
    return 1;
} else {
return 0;
}
}

如果用户输入了一个长度为 10 个字符并以“04”开头但字符串中有一个字母的字符串,则该函数将返回 false。同样,如果输入的字符长度为十个字符并且以“04”开头并且没有字母,它将返回true。谢谢。

【问题讨论】:

  • 你需要去买一本关于 C++ 的好书。
  • 我有一本 c++ 傻瓜书,是好是坏?
  • strtol 呢?如果 endptr 之后没有指向字符串的结尾,则不是整个字符串都是数字。您还需要检查返回的整数是否不是负数,因为这意味着前面有一个减号。

标签: c++ string int codeblocks


【解决方案1】:

如果将此类字符串转换为整数,您可能会遇到困难,因为它们有一个前导零,在转换时会被删除。

我建议使用标准库中的 std::all_of 和 ::isdigit;

if (phone.length() == 10 && phone.substr(0, 2) == "04"
    && std::all_of(phone.begin(), phone.end(), ::isdigit)) // added

这会奏效。记得包含<algorithm> 和<cctype>。

请注意,它需要 C++11(或更高版本),如果您使用 gcc,则由 -std=c++11 激活。 如果 C++11 不可用,此答案https://stackoverflow.com/a/8889045/5118228 解释了如何滚动您自己的测试器功能。

【讨论】:

    【解决方案2】:

    可以使用std::ostringstream,如:

    std::string example = "10";
    unsigned int value;
    std::istringstream text_stream(example);
    text_stream >> value;
    

    您可能希望使用 dec 修饰符来处理前面的任何零:
    text_stream >> dec >> value;

    我没试过。该问题基于以 0 开头的 C++ 数字常量被视为八进制(以 8 为基数)。

    编辑 1:示例程序

    #include <string>
    #include <sstream>
    #include <iostream>
    
    int main(void)
    {
        std::string example = "010";
        unsigned int value;
        std::istringstream text_stream(example);
        text_stream >> value;
        if (value == 10)
        {
            std::cout << "Coversion correct\n";
        }
        else
        {
            std::cout << "Invalid conversion.\n";
        }
    
        return 0;
    }
    

    【讨论】:

    • 错误:变量 'std::ostringstream text_stream' 具有初始化程序但类型不完整
    • 错误:请求'Phone'中的成员'length',它是非类类型unsigned int
    • 抱歉,我的错误字符串流。使用std::istringstream。查看我的最新编辑。
    猜你喜欢
    • 2011-07-11
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多