由于C语言本身并不提供字符串的操作,若要对一个字符串进行操作,必须利用字符数组(以‘\0’为终止符),来对一个一个字符的存储与操作,极其不方便。
相比较而言,C++提供了字符串数据结构(string),它可以很方便的对字符串进行基本操作。
头文件引用
#include<string>
using namespace std;
初始化操作
//法1:先输入字符数组a,将a中内容赋值给str1
char a[100];
fgets(a, 100, stdin);//将一行的输入内容读入a中,以‘\n’作为终止符,stdin表示标准输入输出
string str1 = a;
//法2;在初始化时就输入内容
string str2 = "Hello world!";
访问元素(下标访问、迭代器访问)
//通过下标访问每个元素
for( unsigned int i = 0; i < str.size(); i++){
printf("%c\n", str[i]);//%c来输出字符元素
}
//通过迭代器访问每个元素
for(string::iterator it = str.begin(); it != str.end();it++) {
printf("%c\n", *it);
}
//也可以这样写
for(auto it = str.begin(); it != str.end(); it++) {
printf("%c\n", *it);
}
增删改查、查找、切片、其他操作
- 基本操作(增删改查)
string str = "Hello world!";
//增
str.insert(site, " end world");//插入元素到指定位置
//删
str.erase(site);//删除指定位置到最后的所有元素
str.erase(site,lens);//删除从site位置开始,长度为lens的字符串
- str的find操作
- 如果找到了,返回匹配内容的起点下标
- 如果没找到,返回string::npos(相当于“-1”)
string str ="how are you";
int pos = str.find("you");
if(pos != string::npos){ //找到了,输出:found = 8
printf("found = %d\n", pos);
}
else{ //没找到,输出:no found
printf("no found\n");
}
- 切片操作(返回子串)
string str = "We think in generalities, but we live in details.";
string str1 = str.substr(3,5);//返回str中位置为3开始,长度为5的子串,结果为:think
- 其他操作
//其他操作
string str = "Hello world!";
int len1 = str.size();//读取字符串str的长度
int len2 = str.length();//读取字符串str的长度,与size()函数相同
string str1 = "Nice to";
string str2 = " meet you.";
str = str1 + str2;//利用运算符“+”将str1与str2连接起来
str.clear();//清空str内的所有元素
相关例题
//特殊乘法 题解
#include<cstdio>
#include<string>
using namespace std;
int main(){
char a[1000];
char b[1000];
while(fgets(a, 1000, stdin)!= NULL){
long long int result = 0;
int num;
string str1 = a;
for(int i = 0; i<str1.size(); i++){
if(str1[i] == ' '){
num = i;
break;
}
}
string str2 = str1.substr(num+1, str1.size() - num-2);
str1 = str1.substr(0,num);
for(int i = 0; i < str1.size(); i++){
for(int j = 0; j < str2.size(); j++){
result = result + (int)(str1[i] - '0')*(int)(str2[j] - '0');
}
}
printf("%lld\n",result);
}
}
参考内容:
机试的意义和主要内容
机试指南
牛客网