-
c++中的string类与c中的string.h头文件的函数不一样,< string >更多的是将字符串看成对象来处理。
-
注意
2.1 string对象只能用cin输入和cout输出,不能用scanf和printf输入输出!!非要想不开要用的话可以通过c_str() 的方法将string对象转换成字符数组来输出。
string str="abcd";
printf("%s\n",str.c_str());
-
访问字符串中元素方式
(1)通过下标即可访问str[i]
(2)通过迭代器访问
许多字符串有关函数需要传入的参数是迭代器类型,所以string的迭代器访问很重要。
迭代器的创建 string::iterator这个·是完整的类型名。string::iterator it;
访问过程:
用for循环遍历 迭代器可以看成专门用于有顺序的数据结构的专用指针,所以可以通过 * 迭代器来取迭代器中的元素。for(string::iterator it =str.begin();it!=str.end();it++){ printf("%d",*it); }
-
常用函数功能
(1)支持“+”将两个字符串拼接
(2)两个string类型可以直接用==、!= 、<、>来比较
(3)str.insert(pos,string) ;intseert(it1,it2.begin,it2.end);it1,it2都为迭代器类型
(4)erase(it) ; erase(first,last); erase(pos,length);
(5)str.substr(pos,len)返回从pos号位开始、长度为len的子串。
(6)str.find(str2),党str2是tr子串时,返回其在str中第一次出现的位置。str.find(str2,pos),从str的pos号位开始匹配str2,返回值与上相同。
(7) string::npos是一个常数通常为-1或4294967295,不用管这个常数是什么,需要知道的是string::npos就是表示查找失败时的返回值。
(8)str.replace(pos,len,str2)把从str从pos号位开始、长度为len的子串替换为str2.str.replace(it1,it2,str2),把[it1,it2)迭代器所指向的范围替换为str2。 -
例题 PAT B1002 写出这个数
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10^100。
输出格式: 在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例: 1234567890987654321123456789
输出样例: yi san wu
测试代码:
#include<iostream>
#include<string>
using namespace std;
int main(){
string str,result;
cin>>str;
int sum;
for(string::iterator it=str.begin();it!=str.end();it++){
sum+=(*it-'0');
}
result=to_string(sum);
char ch;
for(int i=0;i<result.length()-1;i++){
ch=result[i];
switch (ch)
{
case '1':
cout<<"yi ";
break;
case '2':
cout<<"er ";
break;
case '3':
cout<<"san ";
break;
case '4':
cout<<"si ";
break;
case '5':
cout<<"wu ";
break;
case '6':
cout<<"liu ";
break;
case '7':
cout<<"qi ";
break;
case '8':
cout<<"ba ";
break;
case '9':
cout<<"jiu ";
break;
case '0':
cout<<"ling ";
break;
default:
break;
}
}
ch=result[result.length()-1];
switch (ch)
{
case '1':
cout<<"yi";
break;
case '2':
cout<<"er";
break;
case '3':
cout<<"san";
break;
case '4':
cout<<"si";
break;
case '5':
cout<<"wu";
break;
case '6':
cout<<"liu";
break;
case '7':
cout<<"qi";
break;
case '8':
cout<<"ba";
break;
case '9':
cout<<"jiu";
break;
case '0':
cout<<"ling";
break;
default:
break;
}
}