【C++】字符串、数字相互转换

总结:

isdigit() 判断是否为十进制。

atoi() 将 char[] 转换为十进制。可掐头去尾。

to_string() int 转string

stoi 将string转int

 

复制代码
#include <iostream>
#include <sstream>
using namespace std;

int main()
{
    double x;
    string str;
    cin >> x;
    str = to_string(x);
    cout << str;
    return 0;
}
复制代码
复制代码
#include <iostream>
#include <string>
using namespace std;

int main()
{
    int x;
    string str;
    cin >> str;
    x = stoi(str);
    cout << x;
    return 0;
}
复制代码

 

复制代码
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main ()
{
    char str[]="1776ad";
    int year;
    if (isdigit(str[0]))
    {
        year = atoi (str);
        printf ("The year that followed %d was %d.\n", year, year+1);
    }
    return 0;
}
复制代码

 

相互转换 c++ 数字与字符串的相互转换 - ICEIX - 博客园 (cnblogs.com)

 联动lc题目C++简单代码/双百: - 字符串转换整数 (atoi) - 力扣(LeetCode) (leetcode-cn.com)

isdigit()_C语言isdigit()详解:判断一个字符是否是十进制数字 (biancheng.net)

 

为什么<ctype.h>中的函数参数都是int类型 (biancheng.net)

<ctype.h> 头文件中包含了一系列与字符处理有关的函数,这些函数有一个共同特点:它们的参数都是 int 类型。例如:

  • int isalnum ( int c );
  • int islower ( int c );
  • int isupper ( int c );
  • int tolower ( int c );
  • int toupper ( int c );

为什么这些函数的参数都是 int 类型?

在编写C语言程序时,我们通常使用char或者unsigned char来表示一个字符,而 <ctype.h> 所包含的字符处理函数的参数都是 int 类型,这是为什么呢?

<ctype.h> 中的字符处理函数除了能够接收 unsigned char 范围内的“普通”字符,还必须能够接收一个无效的字符——EOF。
EOF 除了可以表示文件结尾,还可以表示一个无效的字符。
也就是说,参数要接收的数值范围大于 char 所能表示的数值范围,所以参数的类型必须大于char。大于 char 的类型有 short、int、long 等,C语言标准干脆规定就用 int 吧,这样绰绰有余,弹性很大。

char 可以隐式地转换为 int,我们在给字符处理函数传参时不需要再进行显式的(强制的)类型转换了。

关于 char 以外的字符

C语言标准规定,<ctype.h> 中的字符处理函数至少要能够处理 unsigned char 范围以内的字符,范围以外的字符不做要求,各个组织在实现标准库时可以自由发挥。

这就导致不同的标准库之间存在差异,例如在 Visual Studio 中处理 unsigned char 以外的字符会导致断言失败,程序终止执行;而在 Xcode(基于LLVM编译器)中可以顺利处理 unsigned char 以外的字符,比如汉字"中国我爱你!"
在 Debug 模式下断言才会生效。
为了让代码更有兼容性,建议使用 <wctype.h> 中的宽字符处理函数来处理 unsigned char 以外的字符。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main ()
{
    char str[]="1776ad";
    int year;
    if (isdigit(str[0]))
    {
        year = atoi (str);
        printf ("The year that followed %d was %d.\n", year, year+1);
    }
    return 0;
}
posted @   nntzhc  阅读(361)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示