zoukankan      html  css  js  c++  java
  • C和C++中字符串与数的转换

    以下内容来自《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/

  • 相关阅读:
    Java 链表
    知识点归列
    HTML和CSS必须知道的重点难点问题
    函数表达式
    javascript原型链
    canvas成长树
    checkbox选中问题
    使用vue-cli脚手架自定义iview主题
    AI学习吧-Redis操作-事务、订阅
    AI学习吧-REDIS-常识
  • 原文地址:https://www.cnblogs.com/XiaoXiaoShuai-/p/10447828.html
Copyright © 2011-2022 走看看