字符串中的技巧
不定期更新
注 :字符串中的 \(stl\) 放在这里
题面 , 题目大意就是给一堆数字,将其排列,使组成的数字最小.
\(①\) \(:\) 将其直接sort , 再按顺序排列会有问题,比如样例中的 \(32\) \(321\) ,\(32132\) 的字典序就小于 \(32321\) 的字典序, 这时利用 cmp : a+b < b+a 即可.
bool cmp(string a,string b) {return a+b<b+a;}
\(②\) \(:\) 去前导零利用好 erase 函数.
while(ans.length()&&ans[0]=='0')
ans.erase(ans.begin());
if(ans.length()==0) cout<<"0";
cout<<ans;
关于 erase 函数
\(①\) \(:\) 字符数组是不能使用这个函数的.
\(②\) \(:\) erase(pos,n) 删除从 \(pos\) 位置开始包括 \(pos\) 在内的连续的 \(n\) 个字符.
\(③\) \(:\) erase(pos) 删除pos处字符,要注意这里与 \(①\) 不同的是,这里的 \(pos\) 是迭代器. 例如删除 \(1\) 位置的字符 ,我们只能写 erase(a.begin()+1) ,而不能写 erase(1).
\(④\) \(:\) erase(first,end) 删除区间 \([first,end]\) 的字符 ,同样注意迭代器的问题. 例如 erase(a.begin()+1,a.end()-1) .
迭代器 \(:\) 容器中确定地址 (浅显理解)
\(③\) \(: updata\) 字符串函数
\(strcat\)
strcat(a,b) , 将 \(b\) 字符串复制到 \(a\) 的结尾.
对比 \(strncat\)
strncat(a,b,n) , 将 \(b\) 字符串的前 \(n\) 位复制到 \(a\) 的结尾.
\(strcmp\)
strcmp(a,b) 若 \(a\) 字典序大于 \(b\) 则返回正数 , 小于则返回负数 , 相等则返回 \(0\) .
对比 \(strncmp\) , \(stricmp\)
strncmp(a,b,n) 将 \(a\) , \(b\) 的前 \(n\) 位进行比较.
stricmp(a,b) 忽略 \(a\) , \(b\) 的大小写进行比较.
\(strlwr\) , \(strupr\)
strlwr(a) : 将字符串 \(a\) 中的大写转换为小写.
strupr(a) :将字符串 \(a\) 中的小写转换为大写.
\(④ :\) 字符串输入 , 输出
\(①: getline\) 函数
先讲一下 \(cin.getline(name , size)\) , 注意这个函数是对于字符数组的 , 非字符串 .
其中 \(name\) 是字符数组的名称 , \(size\) 是你需要的字符长度减一 , 例如输入 \(abc\) , \(size\) 就得是 \(4\) .
注意 \(size\) 最多到字符长度 \(+1\) , 且可以读入空格 空格是算一个长度的. (不保留换行符 , 用空字符替换行符)
再者讲 \(getline(cin,s)\) , \(s\) 是字符串 , 而不是字符数组 , 也是读一行读到换行符 , 空格可以读入.
\(② : get\) 函数
\(cin.get(char ch)\) 读取输入下个字符(是可以读入空格的)
\(cin.get(name,size)\) , 参数意义跟 \(cin.getline()\) 一致 , 但它会保留换行符 , 连用两个 \(cin.get\) (第一个数可以读完时) , 第二个 \(cin.get\) 因读到第一个 \(cin.get\) 留下的换行符则直接停止.
单个字符串排序
string a;
sort(a.begin(),a.end());
sort(a.begin(),a.end(),greater<char>());
\(tolower\) , \(toupper\) 函数
两个函数都争对于单个字符 , \(tolower\) 是将大写转小写 , 本身是小写的话就不变 , \(toupper\) 同理.
注意二者返回的都是 \(ascll\) 码 , 要转回字符.

浙公网安备 33010602011771号