以下内容来自《C/C++程序设计实用案例教程》

1、在C语言中的转换方式

1.1数字转换为字符串

  在C语言中,sprintf函数可以将任何多个数字格式化为指定格式的字符串,sprintf函数声明如下

int sprintf(char* buffer,const char* format,...);

  可以看出和printf的函数声明很相似

int printf(const char* format,...);

  但是它多了第一个参数buffer,因为printf只需要将格式化的内容输出到console窗口,而sprintf需要将格式化的内容输出到缓冲区,buffer就是这个缓冲区内存。

  因为是输出到缓冲区,所以报自行确保str的内存空间足够容纳格式化的内容,否则存在内容溢出的风险,一个null字符会被自动添加到格式化内容的最后位置。

  函数的int类型的返回值返回的是字符串的长度(不包括字符串最后的空字符)。

  1.1例子

#include <stdio.h>
#pragma warning(disable:4996) int main()
{
int a = 6, b = 9;
char buffer[80];
sprintf(buffer, "%d + %d = %d", a, b, a + b);
printf(buffer);
return 0;
}

  1.1结果

1.2从字符串中提取数字

  C语言提供了sscanf函数用于从格式化的字符串中提取多个类型的数据,同理,sscanf和scanf的作用类似,区别在于scanf是从用户键盘输入的字符中提取数据,而sscanf是从一个字符串缓冲区中提取数据,sscanf函数声明如下:

int sscanf(const char* buffer, const char* format,...);

  1.2例子

#include <stdio.h>
#pragma warning(disable:4996) int main()
{
char str[] = "I'm 18 year old";
char subStr[20];
int n;
sscanf(str, "%s%d",subStr,&n);//将str中的第一个字符串"I'm"(以空格分界)提取到substr中,第二个字符串提取到n中
return 0;
}

  1.2结果

1.3字符串转换为整数

  在C语言中,将字符串变为一个整数,可以使用atoi函数,需要引入头文件<stdlib.h>,atoi函数声明如下

int atoi (const char* str);

  1.3例子

#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996) int main()
{
int i;
i = atoi("64");
return 0;
}

  1.3结果

1.4字符串转换为浮点数

  将字符串转换为浮点数,可以使用atof函数,atof函数声明如下

double atof(const char* str);

  1.4例子

#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996) int main()
{
double i;
i = atof("64");
return 0;
}

  1.4结果

2、在c++中的转换方式

  在c++中,std::string类没有提供任何字符串与数字转换的方法,这个任务交给了stringstream类。

2.1将字符串转换为数字

  想把字符串转换为数字,使用istringstream类,需要引入头文件<sstream>

  2.1例子

#include <iostream>
#include <sstream> //std::istringstream
#include <string> //std::string int main()
{
char str[] = "3.5 + 2.5 = 6"; //加号和等号两边一定要有空格
//char str[] = "3.5+2.5=6"; //错误写法
std::istringstream iss(str); //将str中的内容存入流对象iss中
double a, b, c;
std::string s;           //s也可使用char类型 iss >> a >> s >> b >> s >> c;
return 0;
}

  2.1错误写法所导致的结果

  2.1正确写法的结果

2.2将数字转换成字符串

  想把数字转换成字符串,使用ostringstream类,同样需要引入头文件<sstream>

  2.2例子

#include <iostream>
#include <sstream> //std::ostringstream
#include <string> //std::string int main()
{
std::ostringstream oss;
double a = 3.5, b = 2.5, c;
c = a + b;
std::string s; oss << a << "+" << b << "=" << c;
s = oss.str(); //从流对象中提取出字符串
return 0;
}

  2.2结果

3、使用STL标准的库函数std::stoi,std::stof和std::stod从std::string对象获得int,float和double的值

  函数声明如下

int stoi(const string& _Str, size_t *_Idx = 0, int _Base = 10);
float stof(const string& _Str, size_t *_Idx = 0);
double stod(const string& _Str, size_t *_Idx = 0);  //第二个参数返回的是字符串中紧挨着数字的下一个字符的索引

  3.例子

#include <iostream>	//std::cout
#include <string> //std::string std::stoi std::stod int main()
{
char str[] = "1997,my";
size_t sz;
int year = std::stoi(str,&sz); //sz的值为4,正好对应着字符串的第五个字符','(也就是1997的下一个字符,索引是从0开始的)
return 0;
}

  3结果

4、拓展

  网址:http://www.cplusplus.com/reference/string/

C和C++中字符串与数的转换的更多相关文章

  1. js中字符串,数字之间转换的常用方法

    var number={ num:, num1:"2你好" }; //将数字转换为字符串 var str=number.num.toString();//十进制 );//二进制 ) ...

  2. C++中字符串的表示与转换

    转换总结 1.char*转string:可以直接赋值. 2.char[]转string:可以直接赋值. 3.char*转char[]:不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用st ...

  3. 1042 数字0-9的数量 1050 循环数组最大子段和 1062 序列中最大的数 1067 Bash游戏 V2 1092 回文字符串

    1042 数字0-9的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 给出一段区间a-b,统计这个区间内0-9出现的次数.   比如 10-19,1出现11次 ...

  4. js中字符串相关知识点总结

      有引号就是字符串类型 空格也算长度 字符串的length不可写 typeof 判断数据类型 var s="a bcadde你好" // alert(typeof s)      ...

  5. C#中字符串的操作

    1.Replace(替换字符):public string Replace(char oldChar,char newChar);在对象中寻找oldChar,如果寻找到,就用newChar将oldCh ...

  6. java中字符串String 转 int(转)

    java中字符串String 转 int String -> int s="12345"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法 ...

  7. C++ 中字符串标准输入的学习及实验

    声明:下面实验中[]里面表示要输入里面的符号,[]符号本身并未输入 1.cin>> cin使用空白(空格.制表符.回车)来确定字符串的结束位置. cin会将换行符留在输入输出队列中. #i ...

  8. 处理PHP中字符串的常用操作及函数

    1. 确定一个字符串的长度 这是最为常见和基础的例子,对于确定一个字符串的长度,我们应该使用strlen()函数,比如要获取下面字符串$text 的长度: $text = "sunny da ...

  9. Python中字符串的方法及注释

    先整理到这里:用的时候便于查询.相当于自己的资料库吧. capitalize()   把字符串的第一个字符改为大写 casefold()   把整个字符串的所有字符改为小写 center(width) ...

随机推荐

  1. UGUI ScrollView中显示模型和特效

    游戏开发中有时候会遇到在UI上显示模型和特效的需求,这次需要在ScrollView上显示.我们使用UGUI的Screen Space - Camera模式,修改模型和特效的layer使之显示在UI上面 ...

  2. swiper如何禁止左右箭头切换

    swiper做项目时,需求 带着左右两边的箭头, 场景1:swiper自动切换,此时左右箭头点击时不能切换   场景2:swiper手动切换,左右箭头可以实现切换,通过翻阅api 终于找到 <s ...

  3. 关于爬虫的日常复习(7)—— DOM操作及selenium库

  4. Java单体应用 - 开发工具 - 01.IntelliJ IDEA

    原文地址:http://www.work100.net/training/monolithic-tools-intellij-idea.html 更多教程:光束云 - 免费课程 IntelliJ ID ...

  5. CCPC-Wannafly Winter Camp Day 1

    B. 密码学 题意: 告诉你关于字符串加密的方法,然后给你一些加密操作和加密后的字符串,让你求原来的串 思路: 知道被加密后的串与加密字符可以向前推出被加密之前的串,不断向前模拟即可 #include ...

  6. 【VBA】EXCEL通过VBA生成SQL,自动生成创建表结构SQL

    原文:https://blog.csdn.net/zutsoft/article/details/45441343 编程往往与数据库密不可分,一个项目往往有很多的表,很多时候通过excel来维护表结构 ...

  7. Python中的 if __name__ == '__main__' 是什么意思?

    最近在看Python代码的时候,因为是Python初学者,看到这个if __name__ == '__main__' 的判断,并且下面还有代码语句,看了其他地方的说明,还是没搞明白是什么意思, 在看到 ...

  8. 认识Class -- 终于不在怂

    引子     本是新年,怎奈新冠肆掠,路上行人,男女老少几乎是全副口罩,形色匆匆:偶尔有一两个裸露口鼻的,估计都是没囤到口罩的,这几天药店几乎都是贴上大字:口罩没货.看着网络上病毒消息满天飞,我也响应 ...

  9. Thumb.db看不到的问题

    今天读取数据集的时候总是会读到一个Thumb.db的缩略图文件,点开查看选项里面的显示隐藏文件.文件夹处于勾选状态,此时文件夹中并不存在此文件. 解决方案: 勾选掉隐藏受保护的操作系统文件即可.

  10. Day7-Python3基础-面向对象进阶

    内容: 面向对象高级语法部分异常处理 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 Socket开发基础 面向对象高级语法部分 静态方法       通过@staticmethod ...