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

最新文章

  1. 百度-official
  2. 自制简单的.Net ORM框架 (一) 简介
  3. JSP 连接MySQL 5.1
  4. 让Session失效的三种方法
  5. SQLServer 使用smb存放数据文件
  6. ubuntu上安装mysql 编译安装
  7. BindingFlags说明
  8. android 68 单元测试
  9. SonarQube代码质量管理平台工具
  10. 使用python做你自己的自动化测试--对Java代码做单元测试 (2)-导入第三方jar包裹
  11. iOS oc和swift中协议的使用
  12. Struts2学习笔记⑧
  13. cms基本概念(dedecms,phpcms)
  14. 第三周 IP通信基础回顾
  15. openwrt官方固件怎么中继网络
  16. hdu4289 Control 最大流最小割
  17. 吴裕雄 31-MySQL 导出数据
  18. 在Linux中连接android设备
  19. 数据库之mongodb
  20. 基于Packet Tracer 组建智能公司局域网

热门文章

  1. MS SQL Server2000转换成MySQL
  2. CentOS 6.5添加网易163源
  3. loj #6136. 「2017 山东三轮集训 Day4」Left
  4. 在DIV里面让图片居中
  5. JUnit4学习
  6. (转)Android开发--常用的传感器总结
  7. Python学习之变量的作用域
  8. 关联数组的错误,mysql insert varchar 原生的错误
  9. FPGA学习中的代码阅读
  10. jave获取音频时长