string对象作为vector元素

string对象可以作为vector向量元素,这种用法类似字符串数组。

#include<string>
#include<vector>
#include<iostream>
using namespace std;
int main()
{
vector<string> vec;
vec.push_back("qianshou");
vec.push_back("Iwas shocked by your inability");
cout<<vec[0]<<endl;
cout<<vec[0][2]<<vec[0][3]<<endl;
cout<<vec[1]<<endl;
return 0;
}

string数组可以看做是一个二维的字符数组



string类型的数字化处理

我们通常会遇到将一个整数的每个位分离出来的情况,一般的方法是采用不断取余获得余数的方法,但是当数字较大的时候,计算量就比较大,这是我们可以使用string对象来处理:

#include<string>
#include<iostream>
using namespace std;
int main()
{
string num = "1234506";
int len = num.length();
//分别输出各位的数字
int b=0;
for(int i=0;i<len;i++)
{
b= num[i]-'0';
cout<<b<<"";
}
//求得各位数字的和
int sum=0;
for(int i=0;i<len;i++)
{
sum+= num[i]-'0';
}
cout<<"\nsum:"<<sum<<endl;
return 0;
}

输出结果:

1 2 3 4 5 0 6

sum:21

string对象与字符数组相互操作

可以直接把字符数组的首地址传给string对象,达到复制字符数组的效果;string对象也可以转化为char数组,不过只能赋值给静态的字符指针:

#include<string>
#include<iostream>
using namespace std;
int main()
{
charc[] = "hello world";
string str; str = c; //将字符串指针赋给string变量
cout<<str<<endl;
str[1]= 'x';
cout<<str[0]<<str[1]<<str[2]<<endl; const char *p; //只能使用常指针只接受指向string的指针
p= str.c_str();
cout<<p<<endl;
cout<<p[2]<<endl;
return 0;
}

输出结果:

hello world

hxl

hxllo world

l

string对象与sscanf函数

sscanf函数很管用,它可以把一个字符串按照你需要的方式分离出子串,甚至是数字。

#include<string>
#include<iostream>
using namespace std;
int main()
{
string s1,s2,s3;
char sa[100],sb[100],sc[100];
//将字符串分离成子串,分隔符为空格
sscanf("abc 123 xyz","%s %s %s",sa,sb,sc);
s1= sa;
s2= sb;
s3= sc;
cout<<s1<<""<<s2<<" "<<s3<<endl;
//将字符串分割成数字,分隔符为逗号
int a,b,c;
sscanf("123,456,789","%d,%d,%d",&a,&b,&c);
cout<<a<<" "<<b<<" "<<c<<endl;
return 0;
}

输出结果:

abc 123 xyz

123 456 789

string对象与数值相互转换

方法一:

使用atoi、atol、atof、strtod、strtol、strtoul、itoa()
、fcvt()等库函数进行过转换,在使用该库函数的时候需要引入头文件cstdlib。

具体用法详见:

http://blog.csdn.net/tsinfeng/article/details/5844838

http://see.xidian.edu.cn/cpp/html/1573.html

因为以上库函数的参数是字符指针,所以对于string对象而言,需要先使用c_str方法,将字符数组的首指针取出,然后才可以转化为对应数值。

浮点数转字符串的时候,并不是直接得到对应的浮点数,而是分别得到一串数字p,小数点的位置dec_pl以及正负号sign。

#include<string>
#include<cstdlib>
#include<iostream>
using namespace std;
int main()
{
string s1 = "123";
string s2 ="25.3";
int a1;double a2; //string类型转化为数值
a1 = atoi(s1.c_str());
a2 = atof(s2.c_str());
cout<<a1<<" "<<a2<<endl; //数值转化为string对象
a1 = 25;
a2 = 3.1415;
char *p;
itoa(a1,p,10);
s1 = p;
int dec_pl,sign,ndigit=4;
p = fcvt(a2,ndigit,&dec_pl,&sign);
s2 = p;
string t1 = s2.substr(0,dec_pl);
string t2 = s2.substr(dec_pl);
s2 = t1+'.'+t2;
cout<<s1<<" "<<s2;
return 0;
}

输出结果:

123 25.3

25 3.1415

方法二:

使用sscanf将string转换为数字,使用printf将数字转换为string。

#include<string>
#include<iostream>
using namespace std;
int main()
{
string s1,s2; //将字符串分割成数字,分隔符为空格
int a; double b;
s1 = "1234 3.1415";
sscanf(s1.c_str(),"%d %lf",&a,&b);
cout<<a<<" "<<b<<endl; //将数字转化为字符串
char p[10];
int c = 3456;
double d = 2.345;
sprintf(p,"%d",c);
s1 = p;
sprintf(p,"%lf",d);
s2 = p;
cout<<s1<<" "<<s2<<endl;
return 0;
}

输出结果:

1234 3.1415

3456 2.345000

string基本字符系列容器(二)的更多相关文章

  1. string基本字符系列容器(一)

    C++STL提供了string基本字符系列容器来处理字符串,可以把string理解成字符串类,它提供了添加,删除,替换,查找和比较等丰富的方法. 使用string容器,需要头文件包含声明#includ ...

  2. C++之string基本字符系列容器

    string基本字符系列容器 C语言只提供了一个插入类型用来处理字符, 而对于字符串, 只能通过字符串数组来处理, 显得十分不便. C++STL提供了string基本字符系列容器来处理字符串, 可以把 ...

  3. string基本字符序列容器(竞赛时常用的使用方法总结)

    C语言只提供了一个char类型用来处理字符,而对于字符串,只能通过字符串数组来处理,而C++STL提供了string基本字符序列容器来处理字符串,可以将其理解为字符串类,它提供了添加,删除,替换.查找 ...

  4. 《sed的流艺术之四》-linux命令五分钟系列之二十四

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  5. AspNetCore-MVC实战系列(二)之通过绑定邮箱找回密码

    AspNetCore - MVC实战系列目录 . 爱留图网站诞生 . AspNetCore - MVC实战系列(一)之Sqlserver表映射实体模型 . AspNetCore-MVC实战系列(二)之 ...

  6. Spring框架系列(二)之Bean的注解管理

    微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.Spring中的两种容器 在系列(一)中我们已经知道,Spring 是管理对象的容器,其中有 ...

  7. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  8. CRL快速开发框架系列教程二(基于Lambda表达式查询)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  9. C#微信公众号开发系列教程二(新手接入指南)

    http://www.cnblogs.com/zskbll/p/4093954.html 此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可 ...

随机推荐

  1. Linux下安装SVN(Subversion)

    一.安装直接运行命令用YUM安装: yum install subversion -y 二.创建版本库创建版本库用svnadmin create命令,大概语法是svnadmin create svn库 ...

  2. better1【模式】Module模式

    var myModule = (function($, _) { var privateVariable = "Hello World" var pulicProperty = & ...

  3. Oracle GoldenGate理论

    1Oracle GoldenGate处理方法和支持的数据库Oracle GoldenGate在多样和异构的基础IT平台中,可以在事务级别上进行数据交换和数据操作.在保证交易完整性和最小的开销的条件下, ...

  4. Eclipse 进入前选择Workspace

    如果选择了默认的Workspace会有一个问题. 打开一个workspace的时候,再次打开eclipse会报错,提示当前workspace正在被使用,然后让选择workspace. 最好的方法是每次 ...

  5. android资源目录---assets与res/raw区别

    android资源目录---assets与res/raw的不同 Android 2011-05-24 14:40:21 阅读20 评论0   字号:大中小 订阅 assets:用于存放需要打包到应用程 ...

  6. (转)oracle嵌套表示例

    本文转载自:http://www.cnblogs.com/gisdream/archive/2012/04/13/2445291.html ----嵌套表:就是把一个表中的字段定义为一个表,这个字段表 ...

  7. java多线程实现礼花绽放的效果,

    总结:主要是那个红点点在上升的过程中要涂黑色,其实它不是一个点,是一个长条,而是被涂成黑色而隐藏了.还有这个睡眠时间,多线程 是你在面板上随便点,会出现随机的颜色圆圈,点哪里,哪里就可以出现圆 imp ...

  8. 摆花 (DP动态规划)

    2012_p3 摆花 (flower.cpp/c/pas) 时间限制: 1 Sec  内存限制: 128 MB提交: 17  解决: 10[提交][状态][讨论版][命题人:外部导入] 题目描述 3. ...

  9. PHP面向对象深入研究之【组合模式与装饰模式】

    组合模式 定义:组合模式定义了一个单根继承体系,使具有截然不同职责的集合可以并肩工作. 一个军队的案例, <?php abstract class Unit { // 个体 abstract f ...

  10. PL/SQL 训练02--集合数组

    1. 请列举关联数组.嵌套表.VARRAY三种集合类型的区别区别:1 关联数组只能在plsql中使用,嵌套表,varray可用于sql中,数据库表中的列2 嵌套表,varray必须在使用的时候初始化, ...