字符串
约 822 个字 114 行代码 预计阅读时间 4 分钟
字符串
存储字符串的时候,已知最大长度是m,我们需要定义一个char s[m+1]
,其中s[m]
用来存储字符串结束的'\0'
字符。
字符串比较:strcmp
函数
在 C 语言中,s == "Tuesday"
这种写法是错误的,原因如下:
根本原因:==
比较的是指针地址,而不是字符串内容
- 在 C 中,字符串是用字符数组表示的,而字符串常量(如
"Tuesday"
)是存储在内存中的某个固定位置。 s == "Tuesday"
比较的是指针s
和字符串常量"Tuesday"
的地址是否相等,而不是字符串的内容是否相等。- 即使
s
的内容是"Tuesday"
,它指向的内存地址与"Tuesday"
常量所在的内存地址不会相同,因此条件永远不会成立。
- 在 C 中,要比较两个字符串的内容是否相同,必须使用
strcmp
函数。 - 例如:
strcmp
的功能:
- 它比较两个字符串的内容,返回:
- 0
:字符串相等。
- 负值:第一个字符串小于第二个字符串。
- 正值:第一个字符串大于第二个字符串。
- 这是 C 标准库提供的函数,专门用于解决字符串内容比较的问题。
C | |
---|---|
Note
为什么使用const char *weekdays[]
而不是 const char weekdays[]
- const char *weekdays[]
是一个数组,数组元素是指针,指向字符串常量。
- const char weekdays[]
是一个数组,数组元素是字符串常量。我们后面存储的是字符串,不是单个字符串存储到整个数组中。
指定位置输出字符串
题干
本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。
函数接口定义:
char *match( char *s, char ch1, char ch2 );
函数match
应打印s
中从ch1
到ch2
之间的所有字符,并且返回ch1
的地址。
裁判测试程序样例:
C | |
---|---|
输入样例1:
输出样例1:
输入样例2:
输出样例2:
输入样例3:
输出样例3:
解答:
- 首先,我们定义了一个函数
match
,它接受三个参数:字符串s
、ch1
和ch2
。 - 然后,我们使用
strlen
函数获取字符串s
的长度,并遍历字符串s
的每一个字符。 - 如果当前字符
s[i]
等于ch1
,我们就开始一个新的循环,遍历s
的每一个字符,直到找到ch2
。 - 我们打印出
s
中从ch1
到ch2
之间的所有字符,并在最后加上一个换行符。 - 最后,我们返回
ch1
的地址。 - 注意,如果
ch1
没有出现在s
中,我们也打印出一个换行符,并返回s
的最后一个地址。
查找子字符串
题干
本题要求实现一个字符串查找的简单函数。
函数接口定义:
char *search( char *s, char *t );
函数search在字符串s中查找子串t,返回子串t在s中的首地址。若未找到,则返回NULL。
裁判测试程序样例:
C | |
---|---|
输入样例1:
输出样例1:
Bash | |
---|---|
输入样例2:
输出样例2:
Bash | |
---|---|