1 字符数组
1.1 字符数组初始化
char str[10] = { 'k','a','n','g','j','i','a','s','a','l' };
//char str[10] = "kangjiasal";报错,应该还有个结束字符‘\0’
char str[11] = "kangjiasal";
//输出
for (int i = 0; i < 10; i++) {
printf("%c", str1[i]);
}
printf("%s", str);
1.2 字符数组的输入输出
1.2.1 scanf输入,printf输出
//scanf输入,printf输出
//%c用来输入单个字符,%s用来输入一个字符串并存在字符数组中
//%c格式能够识别空格跟换行并将其输入
//%s通过空格或换行来识别一个字符串的结束
char c[10][7];
//这个情况下空格是要被当成字符存入数组的
for (int i = 0; i < 7; i++) {
scanf("%c", &c[0][i]);
}
//吸收转行符
getchar();
//%c前的空格很关键,可以做格式化输入
for (int i = 0; i < 7; i++) {
scanf(" %c", &c[1][i]);
}
//读入两行数据
for (int i = 2; i < 4; i++) {
scanf("%s", &c[i]);
}
//输出
for (int i = 0; i < 7; i++) {
printf("%c", c[0][i]);
}
cout << endl;
for (int i = 0; i < 7; i++) {
printf("%c", c[1][i]);
}
cout << endl;
printf("%s", c[1]);
cout << endl;
for (int i = 0; i < 7; i++) {
printf("%c", c[2][i]);
}
cout << endl;
printf("%s", c[3]);
输入输出案例
注:前两行输出是1.1的
1.2.2 getchar()、putchar()
int main() {
char c[5][5];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
c[i][j] = getchar();
}
getchar();//吸收转行符
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
putchar(c[i][j]);
}
cout << endl;
}
return 0;
}
1.2.3 gets输入、puts输出
gets用来输入一行字符串(注意:gets识别换行符\n作为输入结束,因为scanf完一个整数后,如果要使用gets,要先用getchar接收整数后的换行符),并将其存放于一维数组(或二维数组的一维)中;puts用来输出一行字符串,即将一维数组在界面输出,并紧跟一个换行。
int main() {
char str1[20];
char str2[5][10];
gets_s(str1);
for (int i = 0; i < 3; i++) {
gets_s(str2[i]);
}
puts(str1);
for (int i = 0; i < 3; i++) {
puts(str2[i]);
}
return 0;
}
2 string.h
string.h包含了许多用于字符数组的函数。
2.1 strlen()
strlen函数可以得到字符数组中第一个\0前的字符的个数
int main() {
char str[20];
gets_s(str);
cout << strlen(str);
return 0;
}
输入输出
2.2 strcmp()
返回两个字符串大小的比较结果,比较原则是按字典序
int main() {
char str[20], str1[20];
while (true)
{
gets_s(str);
gets_s(str1);
int cmp = strcmp(str, str1);
if (cmp < 0) cout << "str<str1"<<endl;
else if (cmp > 0) cout << "str>str1"<<endl;
else cout << "相等";
}
return 0;
}
输入输出
2.3 strcpy()
可以把一个字符串复制给另一个字符串
//把字符数组2复制给字符数组1,这里的“复制”包括了结束符\0
strcpy(str1,str2);
int main() {
char str[20], str1[20];
gets_s(str);
gets_s(str1);
strcpy(str, str1);
puts(str);
return 0;
}
2.4 strcat()
可以把一个字符串接到另外一个字符串后面
int main() {
char str2[20], str1[20];
gets_s(str1);
gets_s(str2);
strcat(str1, str2);
puts(str1);
return 0;
}
sscanf和sprintf
sscanf
int main() {
int n;
char str[100] = "123";
sscanf(str, "%d", &n);
cout << n;
return 0;
}
输出123
sprintf
int main() {
int n = 233;
char c[100];
sprintf(c, "%d", n);
printf("%s", c);
return 0;
}
输出233
3 string
3.1 定义
string str = "shangan";
3.2 访问
1 通过下标访问
2 通过迭代器访问
int main() {
string str = "abcd";
string::iterator it = str.begin();
for (it; it != str.end(); it++) {
cout << *it;
}
return 0;
}
3.3 常用函数解析
3.3.1 operator+=
string str1 = "kangjia", str2 = "shanganla";
str1 += str2;
cout << str1;
3.3.2 compare operator
//==、!=、<、>、<=、>=
str1 < str2
//...
3.3.3 length()/size()
cout << str.length() << str.size() ;
3.3.4 insert()
1 insert(pos,string),在pos号位置插入字符串string
string str1 = "kangjia", str2 = "shanganla";
str1.insert(7, str2);
cout << str1;
2 insert(it,it2,it3),it为原字符串的欲插入位置,it2和it3为待插字符串的首尾迭代器,用来表示串[it2,it3)将被插在it的位置上
string str1 = "kangjia", str2 = "shanganla";
str1.insert(str1.begin() + 7, str2.begin(), str2.end());
cout << str1;
3.3.5 rease()
1 删除单个元素
string str1 = "kangjia", str2 = "shanganla";
str1.erase(str1.begin() + 4);
cout << str1;
2 删除一个区间
string str1 = "kangjia", str2 = "shanganla";
str1.erase(str1.begin() + 4, str1.end() - 1);
3
//删除从3号位开始的2个字符
str.erase(3,2);
3.3.6 clear()
//清空字符串
str.clear();
3.3.7 substr()
//substr(pos,len)返回从pos号位开始、长度为len的字串,时间复杂度O(len)
str.substr(0,5);
3.3.8 find()
//当str2是str的子串时,返回其在str中第一次出现的位置;如果str2不是str的子串,那么返回string::npos
str.find(str2);
//从str的pos号位开始匹配str2,返回值与上相同
str.find(str2,pos);
3.3.9 replace()
//把str从pos号位开始、长度为len的子串替换为str2
str.replace(pos,len,str2);
//把str的迭代器[it1,it2)范围内的子串替换为str2
str.replace(it1,it2,str2);
想要获取一行字符还是要用字符数组,再使用gets()