标准库中
int putchar(int c)
- 向标准输出写一个字符
- 返回写了几个字符, EOF(-1) 表示写失败
int getchar(void)
- 从标准输入读入一个字符
- 返回类型又是int 是为了返回EOF(-1)
int main() {
int ch;
while ((ch = getchar()) != EOF) {
putchar(ch);
}
printf("EOF\n");
return 0;
}
运行这个程序我们会发现什么?
- 明明是读一个字符,但怎么一行输完给一行?
- 答: 之前提过,我们的设备与程序之间不是直接相连的,而是有个“shell”,它允许我们进行行编辑,即在一行没有结束前,你一整行的内容都没有给到程序,而是在一个很大的“缓存区中”
- 要按 Ctrl+z 才会是给到 EOF ,Ctrl+c是强制中断
- 答: 因为有个shell在那,它收到 Ctrl+z 是 EOF ,它收到 Ctrl+c 就直接把程序关闭了
<string.h>
strlen()
返回字符串不包含0的字符个数
strcmp()
比较两个字符串
- 0 ⇐ s1 == s2
- 1 ⇐ s1 > s2
- -1 ⇐ s1 < s2
strncmp()
参数表最后多个n
我就比开头n个字符
strcpy()
把两个不重叠(地址不重叠)的字符串拷贝, 把s2拷贝进s1
并返回那个s1的值
char *s1=(char*)malloc(strlen(s2)+1);
strcpy(s1,s2);
很多时候我们从外面传入一个数组指针, 这个指针是指向外面的一个地址
我不能确定外面的情况, 也许我需要自己创建一个空间, 并把这个字符串复制过来
strncpy()
参数表最后多个n
我最多拷n个字符, 多的掐掉
strcat()
把s2接在s1后面
返回s1
strncat()
参数表最后多个n
我最多接n个字符, 多的掐掉
strchr() 和 strrchr()
char * strchr(const char *s, int c);
查找s中第一次出现字符c的位置, r就是从右边开始找
返回所在的地址, NULL表示没找到
拓展
找第二次出现?
char s[]="Hello";
char *p=strchr(s,'l');
p=strchr(p+1,'l');
想要找的的后面那段
char s[]="Hello";
char *p=strchr(s,'l');
cout << p;
想要找的前面那段 有个小技巧
把找到的替换0, 输出就会只到这, 到时候我再还回去
char s[]="Hello";
char *p=strchr(s,'l');
char c = *p;
*p=0;
cout << s;
*p=c;
strstr() 和 strcasestr()
char * strstr(const char *s1, const char *s2);
字符串中找字符串, case就是忽略大小写