【基础 | 笔记】

字符类型是一个有序类型,字符的大小顺序按照ASCⅡ代码表。

可以利用字符变量当作循环变量,能够使程序处理更直观。

字符数组的赋值

1. 用字符初始化数组:初始值表赋值(从首元素开始赋值,没有初值的默认为空字符)

char str[6]={'C','h','i','n','a','\0'};  //表示数组str中存放着字符串China

注意:字符串是一维数组,但一维字符数组不等于字符串。此外,字符串的结尾有一个结束符('\0') ,所以字符串常量"a"占两个字节。

2. 用字符串初始化数组

char c[3][6]={"I","love","China"};

注意:字符串的长度要小于字符数组的大小

字符串的输入输出

1. 输入

gets(字符串名称):从光标开始,遇到换行符停止,即读取一整行。

scanf("%s", 字符串名称):从光标开始,遇到空格停止。

2. 输出

puts(字符串名称):输出一个字符串和一个换行符。

printf("%s", 字符串名称):输出字符串(可以一次性输出多个字符串)。


补充:

1. getchar():读入下一个字符(空格也会读入)。

2. 以下语句可实现循环读入数据,在读不到的时候停止循环。

char st[200];
while(scanf("%s",&st)==1) {}

字符串常用处理函数

strcat(字符串1,字符串2):将串2连接到串1的后边,返回新串1

strncat(字符串1,字符串2,长度n):将串2的前n个字符连接到串1的后边,返回新串1

strcpy(字符串1,字符串2):将串2复制到串1,返回新串1

strncpy(字符串1,字符串2,长度n):同上

strcmp(字符串1,字符串2):比较串1和串2的大小,若1>2返回正整数,若1=2返回0,若1<2返回负整数

strncmp(字符串1,字符串2,长度n):同上

strstr(字符串1,字符串2):判断串2是否是串1的字串,若是则返回串2在串1中首次出现的地址,否则返回NULL

strlen(字符串):计算长度,结束符不算在长度内

strlwr(字符串):将大写字母换成小写字母

strupr(字符串):将小写字母换成大写字母


【例1. 字符串移位包含问题】

第一个想法是用循环模拟移位,因为是字串所以只需将母串接尾一次就能够化圈为直线。

但是函数积累量够多,就会想到strstr()这个函数,可以不用模拟而直接判断是否是字串了。

(以下代码被注释掉的部分就是方法一的模拟)

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
char a[31],b[31],tmp[31];

/*bool judge(int x) {
	int now=1;
	for(int i=x+1;i<strlen(a);i++) {
		if(a[i]!=b[now]) return false;
		now++;
		if(now==strlen(b)) return true;
	}
}*/

int main() {
	scanf("%s%s",&a,&b);
	if(strlen(a)<strlen(b)) swap(a,b);  //确定a是母串,b是待检验的子串 
	strcat(tmp,a);
	strcat(a,tmp);  //将母串接尾一次 
/*	int flag=0;
	for(int i=0;i<strlen(a);i++) {
		if(b[0]==a[i]) {
			if(judge(i)==true) {
				cout<<"true";
				flag=1;
				exit(0);
			}
		}
	}
	if(flag==0) cout<<"false";
*/
	if(strstr(a,b)==NULL) cout<<"false";
	else cout<<"true"; 
	return 0;
} 

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值