2.2 string

来源:互联网 发布:大数据考研 编辑:程序博客网 时间:2024/06/08 07:42

字符数组的封装

基本操作与vector很像,它们内部采用的都是数组结构

#include<string>


创建string对象:

string s;


给string对象赋值

方式一:s="i love coding";

方式二: char a[256];

scanf("%s", &a);

s=a;


尾部添加字符/字符串:

s=s+'a';

s=s+" forever";

s.append(" forever");


插入字符

s.insert(s.begin()+1,'p');


下标方式随机访问字符:

cout << s[3];


删除:

erase(s.begin() + 2);

erase(s.begin(), s.begin()+3);


长度:length()

判空:empty()


替换:

s.replace(2,5,"hi"); //从2开始,计数5个字符,将其换为"hi"


子串:

s.find('a');

s.find("abc");

//查找第一次出现的位置,如果查不到,则返回4294967295


比较:

s.compare("cat"); //s大,返回1;s小,返回-1;相等,返回0。


reverse逆序子串

reverse(s.begin(), s.end());


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

char a[256];

scanf("%s", &a);

string s=a;


printf("%s", a);

printf(s.c_str());


cout << a;

cout << s;



string对象与sscanf函数

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

char a1[256], a2[256], a3[256];

sscanf("aaa bbb ccc","%s %s %s", &a1, &a2, &a3); //此时a1=aaa;a2=bbb;a3=ccc;

int a,b,c;

sscanf("111 222 333","%d %d %d", &a, &b, &c); //此时a=111;b=222;c=333;

sscanf("111,222$333","%d %d %d", &a, &b, &c); //此时a=111;b=222;c=333; 因为字符串的数字分隔符为','和'$'



string和数值的相互转换

string d2s(double x)  //double to string  d2s{    ostringstream oss;    if (oss << x)        return oss.str();    return "conversion error"; // if error}double s2d(const string &s)  //string to double  s2d{    istringstream iss(s);    double x;    if (i >> x)        return x;    return 0.0; //if error}


如果需要把读入的数据按位分开,则可采用string类型完成数据读取,然后按下标访问各位数值。





1 0
原创粉丝点击