C形式下的字符串:c_str()
string s1("hello");
const char* str = s1.c_str();
while (*str)
{
cout << *str << " ";
++str;
}
cout << "\n";
获取字符数组首地址,用C字符串的形式遍历
区别:
cout << s1 << endl;//调用的string重载operator<<
cout << s1.c_str() << endl;//直接输出const char*
接口find/substr
string s2("test.txt");
size_t pos=s2.find('.');
cout << pos << endl;
if (pos != -1) cout << s2.substr(pos, string::npos) << endl;;
rfind是从后往前找。
分离url
void SplitUrl(const string& str)
{
size_t i1 = str.find(':');
if (i1 != string::npos) cout << str.substr(0, i1)<<endl;
size_t i2 = str.find('/',i1+3);
if (i2 != string::npos) cout << str.substr(i1 + 3, i2 - (i1 + 3))<<endl;
cout << str.substr(i2 + 1) << endl;
}
operator+=相比operator+效率更高因为+=自身发生改变返回引用相比+少调一次拷贝构造。
getline/cin区别
scanf/cin 输入遇到空格或换行就结束了。
getline(cin,s);遇到空格不结束遇到换行才结束。
字符串最后一个单词的长度
回文串
验证回文串https://leetcode.cn/problems/valid-palindrome/
isalpha和isdigit
class Solution {
public:
bool isCharOrNumber(char ch)
{
if(isalpha(ch)||isdigit(ch))
{
return true;
}
else return false;
}
… if(s[begin]==s[end]) ++begin,--end;
else return false;
}
return true;
}
字符串相加
class Solution {
public:
string addStrings(string num1, string num2) {
int end1=num1.size()-1,end2=num2.size()-1;
string retstr;
int next=0;
while(end1>=0||end2>=0)
{
int val1=0,val2=0;
if(end1>=0) val1=num1[end1]-'0';
if(end2>=0) val2=num2[end2]-'0';
int ret=val1+val2+next;
if(ret>9)
{
ret-=10;
next=1;
}
else next=0;
retstr+=ret+'0';
--end1;
--end2;
}
if(next==1) retstr+='1';
reverse(retstr.begin(),retstr.end());
return retstr;
}
};