百度推广自己做网站吗,济南网站建设工资,网站开发制作价格,文旅网站界面设计在学习cSTL中的string#xff0c;在这里做个笔记#xff0c;以供自己以后翻阅和初学者参考。 1#xff1a;string对象的定义和初始化以及读写 string s1; 默认构造函数#xff0c;s1为空串 string s2(s1); 将s2初始化为s1的一个副本 string s3(valuee);…在学习cSTL中的string在这里做个笔记以供自己以后翻阅和初学者参考。 1string对象的定义和初始化以及读写 string s1; 默认构造函数s1为空串 string s2(s1); 将s2初始化为s1的一个副本 string s3(valuee); 将s3初始化一个字符串面值副本 string s4(n,c); 将s4 初始化为字符c的n个副本 cins5; 读取有效字符到遇到空格 getline(cin,s6); 读取字符到遇到换行空格可读入知道‘\n’结束练习在下一个代码中 getline(cin,s7,a); 一个直到‘a’结束其中任何字符包括\n都能够读入可以试试题UVa10361 下面看一个巩固练习 [cpp] view plaincopyprint? #include iostream #include string using namespace std; int main() { string s1; s1i love you; string s2(s1); //把s2初始化为s1的一个副本,注意写法不能前面先定义s2的类型后面直接写,也不能定义两次s2 string s3(value); //将s3初始化一个字符串面值副本 string s4(10,s); //将s4初始化为字符‘s的10个副本 /*注意字符串面值与标准库string不是同一个类型*/ couts2 s3 s4endl; string s5; while(cins5) //这里可以输入“ hello world ”测试发现只读取有效字符到遇到空格结束 { couts5endl; } return 0; } #include iostream
#include string
using namespace std;
int main()
{string s1;s1i love you;string s2(s1); //把s2初始化为s1的一个副本,注意写法不能前面先定义s2的类型后面直接写,也不能定义两次s2string s3(value); //将s3初始化一个字符串面值副本string s4(10,s); //将s4初始化为字符‘s的10个副本/*注意字符串面值与标准库string不是同一个类型*/couts2 s3 s4endl;string s5;while(cins5) //这里可以输入“ hello world ”测试发现只读取有效字符到遇到空格结束{couts5endl;}return 0;
}2string对象操作 s.empty() 判断是否为空bool型 s.size() 或 s.length() 返回字符的个数 s[n] 返回位置为n的字符从0开始计数 s1s2 连接看下面例子 可用此方法给字符串后面添加字符如ssa; a: string s2s1, ; //对把一个string对象和一个字符面值连接起来是允许的 b: string s4hello , ; //错不能将两个字符串面值相加 c: string s5s1, world; //对前面两个相加相当于一个string对象 d: string s6hello , s2; //错 注字符串尾部追加还可用s.append(abc)函数添加 s1s2 替换 s1s2 相等返回true或false !,,,, 字符串比较两个字符串短的与长的前面匹配短的小于长的 巩固练习 [cpp] view plaincopyprint? #include iostream #include string using namespace std; int main() { string str1; string str2(the size of ); string str3 hello world ;//空格不会忽略 str3str2; str3.append(haha secessful); coutstr3endl; coutthe size of is str2.size()endl; /*注意这里取长度的str2.size()和str2.length(),但是注意str2.size()返回的值并不是int类型 事实表明size_type存储的string长度是int所能存储的两倍*/ getline(cin,str1); //read line at time until end-of-file,注意写法。 while(!str1.empty()) //返回一个bool值空的话返回true否则返回false。 { for(string::size_type i0;i!str1.size();i) //注意size_type类型 { coutstr1[i]; } coutendl;break; } return 0; } #include iostream
#include string
using namespace std;
int main()
{string str1;string str2(the size of );string str3 hello world ;//空格不会忽略str3str2;str3.append(haha secessful);coutstr3endl;coutthe size of is str2.size()endl;/*注意这里取长度的str2.size()和str2.length(),但是注意str2.size()返回的值并不是int类型事实表明size_type存储的string长度是int所能存储的两倍*/getline(cin,str1); //read line at time until end-of-file,注意写法。while(!str1.empty()) //返回一个bool值空的话返回true否则返回false。{for(string::size_type i0;i!str1.size();i) //注意size_type类型{coutstr1[i];}coutendl;break;}return 0;
}3:string对象中字符的处理头文件cctype isalnum(c) 如果c是字母或数字返回 true isalpha(c) 如果c是字母返回true iscntrl(c) c是控制符返回true isdigit(c) 如果c是数组返回true isgraph(c) 如果c不是空格则可打印则为true islower(c) 如果c是小写字母则为true isupper(c) 如果c是大写字符则为true isprint(c) 如果c是可打印的字符则为true ispunct(c) 如果c是标点符号则为true isspace(c) 如果c是空白字符则为true isxdigit(c) 如果c是十六进制数则为true tolower(c) 如果c是大写字符则返回其小写字母否则直接返回c toupper(c) 跟tolower相反 看一个巩固练习代码 [cpp] view plaincopyprint? #include iostream #include string #include cctype using namespace std; int main() { string str1Hello World!!!; string::size_type punct_cnt 0; for(string::size_type i0;i!str1.size();i) { if(ispunct(str1[i])) punct_cnt; str1[i]toupper(str1[i]); } cout字符中标点符号有punct_cntendl; coutstr1endl; return 0; } #include iostream
#include string
#include cctype
using namespace std;
int main()
{string str1Hello World!!!;string::size_type punct_cnt 0;for(string::size_type i0;i!str1.size();i){if(ispunct(str1[i]))punct_cnt;str1[i]toupper(str1[i]);}cout字符中标点符号有punct_cntendl;coutstr1endl;return 0;
} 4string对象中一些函数 /*-------------------------插入函数----------------------------------包括迭代器操作和下标操作下标操作更灵活*/ s.insert( it , p ); 把字符串p插入到it的位置 s.insert(p,n,t) 迭代器p元素之前插入n个t的副本 s.insert(p,b,e); 迭代器p元素之前插入迭代器b到e之间的所有元素 s.insert(p,s2,poe2,len); 在下标p之前插入s2下标从poe2开始长度为len的元素 s.insert(pos,cp,len); 下标pos之前插入cp数组的前len个元素。 /*-----------------------替换函数-------------------------------*/ s.assign(b,e); 用迭代器b到e范围内的元素替换s s.assign(n,t) 用n个t的副本替换s a.assign(s1,pos2,len);从s1的下标pos2开始连续替换len个。 s.replace ( 3 , 3 , good ) ; 从第三个起连续三个替换为good s.substr(i,j) 截取s串中从i到j的子串 //string::npos 判断字符串是否结束 /*-----------------------删除函数-----------------------------*/ s.erase( 3 )||s.erase ( 0 , 4 ) ; 删除第四个元素或第一到第五个元素 /*----------------------其他函数-----------------------------*/ s.find ( cat ) ; 超找第一个出现的字符串”cat“返回其下标值查不到返回 4294967295也可查找字符 s.append(args); 将args接到s的后面 s.compare ( good ) ; s与”good“比较相等返回0比good大返回1小则返回-1 reverse ( s.begin(), s.end () ); 反向排序函数即字符串反转函数 下面看一些巩固练习 [cpp] view plaincopyprint? #include iostream #include algorithm #include string #include numeric using namespace std; int main(int argc,char *argv[]) { string s; s54268713; reverse(s.begin(),s.end()); //字符串反转 coutsendl; string s1i love you; string::iterator it; its1.begin(); s1.insert(it1,p); //插入 couts1endl; string s2(abc123456); string::iterator it2s2.begin(); s2.erase(it26); //删除 couts2endl; s2.erase(it2,it23); couts2endl; s2.replace(2,1,good); //替换 couts2endl; couts2.find(good)endl; //搜索返回下标值 couts2.compare(12good56)endl; //比较自行修改值看其返回值 couts2.compare(12good56758)endl; return 0; } #include iostream
#include algorithm
#include string
#include numeric
using namespace std;
int main(int argc,char *argv[])
{string s;s54268713;reverse(s.begin(),s.end()); //字符串反转coutsendl;string s1i love you;string::iterator it;its1.begin();s1.insert(it1,p); //插入couts1endl;string s2(abc123456);string::iterator it2s2.begin();s2.erase(it26); //删除couts2endl;s2.erase(it2,it23);couts2endl;s2.replace(2,1,good); //替换couts2endl;couts2.find(good)endl; //搜索返回下标值couts2.compare(12good56)endl; //比较自行修改值看其返回值couts2.compare(12good56758)endl;return 0;
}5string的一些常用操作及用法 ***string对象作为vector元素 ***string对象的数字化处理 ***string对象与sscanf函数 直接代码 [cpp] view plaincopyprint? #include iostream #include algorithm #include string #include numeric #include vector #include cstdio using namespace std; int main(int argc,char *argv[]) { vectorstring v; //vector的string v.push_back(Iack); v.push_back(Mike); v.push_back(Tom cluce); coutv[0]endl; coutv[1][1]endl; coutv[2].size()endl; char s3[100],s2[100]; string str3,str2; int ab,ac,ad; sscanf(abc fsaf,%s %s,s2,s3); //注意string不能直接用于sscanf str3s3;str2s2; coutstr3 str2endl; sscanf(4,5$10000,%d,%d$%d,ab,ac,ad); coutab ac adendl; char s[200]; cins; cins; string s1s; printf(s1.c_str()); //c输出字符串对象 return 0; } #include iostream
#include algorithm
#include string
#include numeric
#include vector
#include cstdio
using namespace std;
int main(int argc,char *argv[])
{vectorstring v; //vector的stringv.push_back(Iack);v.push_back(Mike);v.push_back(Tom cluce);coutv[0]endl;coutv[1][1]endl;coutv[2].size()endl;char s3[100],s2[100];string str3,str2;int ab,ac,ad;sscanf(abc fsaf,%s %s,s2,s3); //注意string不能直接用于sscanfstr3s3;str2s2;coutstr3 str2endl;sscanf(4,5$10000,%d,%d$%d,ab,ac,ad);coutab ac adendl;char s[200];cins;cins;string s1s;printf(s1.c_str()); //c输出字符串对象return 0;
}6string与数值的相互转换 注意下面c的两个转化函数比较好用也比较常用、 [cpp] view plaincopyprint? #include iostream #include algorithm #include string #include numeric #include vector #include cstdio #include sstream using namespace std; //c方法将数值转换为string string convert_to_string(double x) { ostringstream o; if(o x) return o.str(); return conversion error; } //c方法将string转化为数值 double convert_from_string(const string s) { istringstream i(s); double x; if(i x) return x; return 0.0; } int main(int argc,char *argv[]) { //将数值转换为string的第一种方法c方法 char b[10]; string a; sprintf(b,%d,1975); //数值转化为string ab; coutaendl; string ccconvert_to_string(1976); coutccendl; string dd115165; int pconvert_from_string(dd)2; coutpendl; return 0; } #include iostream
#include algorithm
#include string
#include numeric
#include vector
#include cstdio
#include sstream
using namespace std;//c方法将数值转换为string
string convert_to_string(double x)
{ostringstream o;if(o x)return o.str();return conversion error;
}
//c方法将string转化为数值
double convert_from_string(const string s)
{istringstream i(s);double x;if(i x)return x;return 0.0;
}
int main(int argc,char *argv[])
{//将数值转换为string的第一种方法c方法char b[10];string a;sprintf(b,%d,1975); //数值转化为stringab;coutaendl;string ccconvert_to_string(1976);coutccendl;string dd115165;int pconvert_from_string(dd)2;coutpendl;return 0;
}下面推荐一些字符串的题目 hdoj 2017 字符串中统计数字直接调用上面s.digit()函数 hdoj 1020 判断输出重复、水题、 hdoj 1062 逆转字符串 注意1getchar()吸收3后\n,2:空格不止有一个 hdoj 1039字符串处理清晰思路可以写三个判断条件的3个函数调用函数判断思路清晰容易判断 hdoj 1088 对字符串按一个一个处理。一次性输入一行不好控制 hdoj 1113 map容器字典序。值得做 hdoj 1161 tolower() 函数转化为小写就ok 1200、1251、1256、1288、1321、1328、1379、1804、1860、 1982、1984、2017、2024、2025、2026、2027、2043、2052、2054、2072、2074、2087、2131、 2137、2140、2163、2203、2206、2352、2500、2549、2564、2565、2567、2572、2609、2607、 2707、2708、2719、2721、2723、 比较详细希望帮助到了跟我一样正在学习中的菜鸟、、、