字符数组的封装
基本操作与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类型完成数据读取,然后按下标访问各位数值。