字符数组、string.h和string

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()

原创文章 35 获赞 17 访问量 1267

猜你喜欢

转载自blog.csdn.net/qq_41436493/article/details/105744172