如何在 C++ 中将字符串转换为 int?

Posted

技术标签:

【中文标题】如何在 C++ 中将字符串转换为 int?【英文标题】:How to convert string to int in c++? 【发布时间】: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 之后没有指向字符串的结尾,则不是整个字符串都是数字。您还需要检查返回的整数是否不是负数,因为这意味着前面有一个减号。 【参考方案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://***.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。查看我的最新编辑。

以上是关于如何在 C++ 中将字符串转换为 int?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中将数字字符串转换为 int 数组 [重复]

当我不使用标准字符串时,如何在 C++ 中将字符串转换为 int?

在 C++ 中将十六进制字符转换为 int

如何在 C++ 中将 Int 转换为 String,反之亦然(不使用像 sstream 这样的库)

如何在 C++ 中将字符串数组转换为整数数组?

在 C++ 中将字符串转换为向量