字符數組的封裝
基本操作與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類型完成數據讀取,然后按下標訪問各位數值。