C和C++中的字符串与数字转换函数
来源:互联网 发布:dnf最近老是网络中断 编辑:程序博客网 时间:2024/05/22 11:38
今天开始想要好好补补程序,开始看老早就买了的《算法入门经典》,发现前面几章对字符串的处理较多,搜罗了一下别人的博客,整理到这上面来。
C语言中常用的字符串和数字转换函数是 sscanf 和sprintf,C++中引入了流的概念,通过流来转换字符串和数字就方便了许多。
1.sprintf函数
sprintf函数原型为 int sprintf(char *str, const char *format, ...)。作用是格式化字符串,具体功能如下所示:
(1)将数字变量转换为字符串。
(2)得到整型变量的16进制和8进制字符串。
(3)连接多个字符串。
(2)得到整型变量的16进制和8进制字符串。
(3)连接多个字符串。
下面贴出代码实例:
#include<stdio.h>#include<iostream>using namespace std;int main(){ char str[256]={0}; int data=1024; //将data转换为字符串 sprintf(str,"%d",data); cout<<str<<endl; //获取data的16进制 sprintf(str,"0x%X",data); cout<<str<<endl; //获取data的八进制 sprintf(str,"0%o",data); cout<<str<<endl; const char *s1="Hello"; const char *s2="World"; //连接s1和s2 sprintf(str,"%s %s",s1,s2); cout<<str<<endl; return 0;}
编辑过程中都忘记了C++结尾要用分号了,伤感……2.sscanf()函数
sscanf函数原型为int sscanf(const char *str, const char *format, ...)。
将参数str的字符串根据参数format字符串来转换并格式化数据,转换后的结果存于对应的参数内。具体功能是从字符串中读取与指定格式相符的数据:
char buf[512]; sscanf("123456","%s",buf); printf("%s\n",buf);//输出结果为123456 //取指定长度的字符串 sscanf("123456","%4s",buf); printf("%s\n",buf);//结果为1234 //取到指定字符为止的字符串 sscanf("123456 abcdef","%[^ ]",buf); printf("%s\n",buf);//取遇到空格为止的字符串 //取仅包含指定字符集的字符串 sscanf("123456abcdefBCDEF","%[1-9a-z]",buf); printf("%s\n",buf);//结果仅包含数字和小写字母 //取到指定字符集为止的字符串,与取到空格为止相似 sscanf("123456abcdefBCDEF","%[^A-Z]",buf); printf("%s\n",buf);//取到大写字母为止 //给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串, //先将 "iios/"过滤掉,再将非'@'的一串内容送到buf中 sscanf("iios/12DDWDFF@122","%*[^/]/%[^@]",buf); printf("%s\n",buf); //给定一个字符串““hello, world”,仅保留world。 //(注意:“,”之后有一空格) sscanf("hello, world","%*s%s",buf); printf("%s\n",buf); //%*s表示第一个匹配到的%s被过滤掉,即hello被过滤了 //如果没有空格则结果为NULL%[ ] 类似于正则表达式,该函数中读取的字符串是默认以空格来分割的,如果不以空格来分割,可以用%[],例如:
sscanf("2006:03:18 - 2006:04:18", "%[0-9,:] - %[0-9,:]", sztime1, sztime2);
3.stringstream类
<sstream>库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。该类除了处理字符串外还可以进行任意类型的转换。具体看实例代码:
template<typename out_type,typename in_type>out_type convert(const in_type&t){ stringstream stream; stream<<t;//向流中传值 out_type result;//这里存储转换结果 stream>>result; return result;} string s="12 34 56 # 788"; stringstream ss; ss<<s; while(ss>>s){ //cout<<s<<endl; int val=convert<int>(s); cout<<val<<endl; }运行结果如下:
可见流输出时也是以空格来分割字符串的。
实验过程中用的codeblocks,VS太大跑起来慢,VC莫名运行不起来,发现codeblocks还可以。
Ctrl+shift+c可以快速注释掉多行
Ctrl+shift+x可以删除注释。
在这里做个笔记!
阅读全文
1 0
- C和C++中的字符串与数字转换函数
- C和C++中的数字与字符串的转换
- C和C++中的字符串和数字转换
- C语言字符串和数字转换函数大全
- C语言字符串和数字转换函数大全
- C/C++各种数字和字符串之间的转换函数
- C语言字符串和数字转换函数大全
- C语言字符串和数字转换函数大全
- c语言字符串 数字转换函数大全
- C语言字符串 数字转换函数大全
- C语言字符串 数字转换函数大全
- c语言字符串 数字转换函数大全
- c语言字符串 数字转换函数大全
- C语言字符串 数字转换函数大全
- c语言字符串 数字转换函数大全
- c语言字符串 数字转换函数大全
- c语言字符串 数字转换函数大全
- c语言字符串 数字转换函数大全
- 关于Spring和SpringMVC父子容器
- RabbitMQ从入门到精通
- 整理时下流行的浏览器User-Agent大全
- 爬虫(2):Pipeline
- php 随机生成100个100万以内的数,顺序查找,二分查找
- C和C++中的字符串与数字转换函数
- C图形库easyX的运用
- oracle中行转列的实现
- 统计学习方法笔记,第二章笔记, 感知机
- 怎样将.java文件编译成.exe可运行文件
- 高仿腾讯QQ侧滑删除
- 菜单递归调用
- iOS9.2 univesal link 踩过的坑
- Java中类加载过程