字符串计算
1. 输入输出用%s
char string[8];
scanf("%7s",string);
printf("%7s",string);
scanf读入一个单词(读到空格、tab、回车为止)
%7s表明最多只能读7个字符(还有结尾的\0)
%s里面的数字表示最多允许读入的字符的数量,这个数字应该比数组的数字小1个
2. 切记字符串指针要初始化
char *s = “abcdefg”; //这个初始化过程,是将指针cp指向字符串的首地址,而并不是传递字符串的值。
字符型数组的操作要用函数,不能直接赋值
要使用头文件#include <string .h>
1. strlen 返回s的字符串长度(不包括结尾的’\0’)
输入输出用%lu
char line[]="Hello";
printf("strlen=%lu",strlen(line));
2. strcmp(s1,s2) 比较两个字符串,返回一个整数值
说明:比较的过程是最两个字符串自左向右逐个字符按ASCII码比较大小,直到出现不同的字符,第一个不相同的字符比较大小。
0:s1==s2
正数差:s1>s2
负数差:s1<s2
3. strcpy 把字符串复制到字符数组
一般形式:strcpy(字符数组,字符串);
例如:
char str[20];
strcpy(str,"C Programming");
常用套路:复制一个新的字符串
char* dst=(char *)malloc(strlen(src)+1);
strcpy(dst,src);
4. strcat 把s2连接到s1的后面接成一个长的字符串,s1必须有足够的空间
一般形式:strcat(字符数组1,字符串);
例如:
char C[40]="C programming",str[12];
strcpy(str,"Language");
strcat(C,str);
完成后C中的内容为:“C Programming Language”
5. 在字符串中找字符:strchr(字符串,某个字符) 自左向右;strrchr(字符串,某个字符) 自右向左,返回的是指针,返回NULL表示没找到。
#include <stdio.h>
#include <string.h>
int main()
{
char s[]="hello";
char *p=strchr(s,'l');
printf("%s",p);
return 0;
}
输出为:llo (因为返回的是指针,第一个l后面的字符都会出现)
问题:如何找第二个?
#include <stdio.h>
#include <string.h>
int main()
{
char s[]="hello";
char *p=strchr(s,'l');
p=strchr(p+1,'l');
printf("%s",p);
return 0;
}
输出为:lo
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char s[]="hello";
char *p=strchr(s,'l');
char c=*p;
*p='\0'
char *t= (char*)malloc(strlen(s)+1);
strcpy(t,s);
printf("%s",t);
free(t);
return 0;
}
输出为:he
6. 在字符串中找字符串:strstr(字符串,某个字符串) ;strcasestr(字符串,某个字符),忽略大小写
字符串的读写
1. scanf和printf
scanf读一个内容,读到空格为止,以回车结束。
2. gets和puts
gets读一行内容,能读空格,以回车结束。
3. getchar和putchar
getchar读一个字符,能读空格、回车,以回车结束。
getchar函数:从标准输入读入一个字符,windows按下ctrl+Z会出错返回EOF,结束文件,EOF表示EndOfFile,是一个宏定义,其值为-1。
putchar函数:向标准输出写一个字符,类型是char(每次写一个),返回EOF表示写失败
#include <stdio.h>
int main ()
{
char c;
printf("请输入字符:");
c = getchar();
printf("输入的字符:");
putchar(c);
return(0);
}
结果:输入345,输出3