string url("http://www.cplusplus.com/reference/string/string/find/");
cout << url << endl;
size_t start = url.find("://");
//如果没有://,说明是无效协议
if (start == string::npos) {
cout << "invalid url" << endl;
return;
}
else{
string tmp = url.substr(0, start);//取出协议
cout << tmp << endl;
}
//找到域名的起始位置
start += 3;
//查找域名的结尾
size_t finish = url.find('/', start);
//取出域名
string address = url.substr(start, finish - start);
cout << address << endl;
}
9.返回字符数量size(),length() 返回字符的可能最大个数max_size() 判断字符串是否为空 empty() 返回重新分配之前的字符容量capacity() 保留一定量内存以容纳一定数量的字符reserve()
auto s=a.empty(); //结果为 s=false;
- size()和length(),他们等效。Empty()用来检查字符串是否为空。
- max_size() 这个大小是指当前C++字符串最多能包含的字符数,很可能和机器本身的限制或者字符串所在位置连续内存的大小有关系。我们一般情况下不用关心他,应该大小足够我们用的。
- capacity()重新分配内存之前 string所能包含的最大字符数。这里另一个需要指出的是reserve()函数,这个函数为string重新分配内存。重新分配的大小由其参数决定, 默认参数为0,这时候会对string进行非强制性缩减。
-
a.reserve(20);
reserve(size_t);可以调整string的空间。 如果size_t大于capacity的容量,则capacity按n*16-1扩大到比size_t 如果size_t小于capacity,则capacity不变
-
a.resize(40);
resize(size_t);可以调整string的空间。 可以改变string size的大小,并且capacity随size变大而变大,但是不会减小,当size缩小后,字符超出的部分会被裁剪掉。
a.resize(40,'A'); 扩充size后可以输入预定字符进行填充 //结果为 a="1234AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
10.与c语言字符串: 将某值赋值为一个C_string,copy() 将内容以C_string返回 c_str() 将内容以字符数组形式返回data()
data()以字符数组的形式返回字符串内容,但并不添加’\0’。c_str()返回一个以‘\0’结尾的字符数组,而copy()则把字符串的内容复制或写入既有的c_string或字符数组内。C++字符串并不以’\0’结尾char*为C编程中最常用的字符串指针,一般以’\0′为结束标志;
char *str = new char[64];
string a="12345abcdefg6789";
str[a.copy(str,7,5)]='\0'; // 结果为 str="abcdefg";
str[a.copy(str,7)]='\0'; // 结果为 str="12345ab";
delete[]str; /*注意 *copy的第2,3个参数不能大于字符串str所能容纳的最长字符串长度 */
str=a.c_str(); str=a.data();//a改变,str也随之改变
//可以生成一个const char* 的指针,可以指向一个空字符终止的地址。 const char* str=nullptr;
c语言中字符串在stdlib.h中有atoi和strtod等字符串转为数字的函数而string可以自己定义万能转换函数
* 转string * *为i,l,f,d
string *tos(* i){ // 改一下函数名,改一下类型,搞定
ostringstream os;
os<<i;
string result;
istringstream is(os.str());
is>>result;
return result;
}//将 * 换成想要的类型就可以执行 * 转 string
*string *
* sto*(string str){ // 改一下函数名,变量类型,搞定
* result;
istringstream is(str);
is >> result;
return result;
}//将 * 换成想要的类型就可以执行 string 转 *
//也可以重载函数,达到万能函数转换
//记得包含头文件 #include <sstream>
//总结:使用 string 流和标准 io 流其实本身就是流,一个原理的,不同调用方法。
注意:前导0,长度
string常见操作
- 把字符串转换成整数
/*首先,这个题不考虑字母*/
/*那就简单多了,只考虑数字,遇到其他情况直接返回-1就行了*/
class Solution {
public:
int StrToInt(string str) {
int ans = 0;int isplus = 1;
for(char ch:str){
if(isalpha(ch)){
return 0;
}if (ch == '+' || ch =='-'){
isplus = (ch == '+') ? 1 : -1;
}if(isdigit(ch)){
ans = ans*10+ch-'0';
}
}return isplus*ans;
}
};
- 字符串相加("123"+"23"="146")
string addStrings(string num1, string num2) {
string str;
int cur = 0, i = num1.size()-1, j = num2.size()-1;
while (i >= 0 || j >= 0 || cur != 0) {
if (i >= 0) cur += num1[i--] - '0';
if (j >= 0) cur += num2[j--] - '0';
str += to_string (cur % 10);//将int转换位s