linux-字符串函数使用
linux-字符串函数使用
- 输入
- 输出
- 长度
- 大小
- 拼接
- 拷贝
- 填充
- 查找
- 比较
字符串的输入,输出,长度,大小,拼接,拷贝,填充,查找,比较
输入
相关的函数有: gets()、getchar()、fgetc()、fgets() 、scanf()。
s输入字符串, char/c输入字符, f可以是标准输入也可以是文件中获取
//gets 获取字符串给str 标准输入gets(str);puts(str); //将str输出出来
//fgets 获取输入的字符串 标准输入 和 文件输入fp = fopen("./test1.txt","a+"); //打开或创建test.txt文件,在末尾进行写入fgets(str2,8,fp); //sizeof(str2) 个数printf("%s\n",str2);fclose(fp);
//fgetc 获取输入的字符 标准输入 和 文件输入fp = fopen("./test1.txt","a+");ch = fgetc(fp); //sizeof(str2) 个数printf("%c\n",ch);fclose(fp);
//fseek() 移动光标fp = fopen("./test1.txt","a+");fseek(fp,3,SEEK_SET);ch=fgetc(fp);printf("%c\n",ch);fclose(fp);
输出
相关的函数有:putchar(),puts(),fputc(),fputs(),printf();
putchar('a'); //输出单个字符 到标准输出设备
puts("hello world!"); //输出字符串 到标准输出设备 自动换行
//与putchar类似,输出单个字符,到标准输出设备//不同的是还可以输出到指定文件fputc('a',fp); //指定文件fputc('a',stdout);//到终端 标准输出设备例子FILE *fp = NULL;if((fp = fopen("./test1.txt","w")) == NULL )
{perror("fopen err");exit(-1);
}fputc('a',fp); //向文件输出puts("fputc写入成功");fputc('a',stdout); //向终端输出fputc('\n',stdout);fclose(fp);
//与puts()类似,输出字符串,到标准输出设备
//不同的是还可以输出到指定文件
fputs("bcdefj",fp); //向文件输出
fputs('bcdefj',stdout); //到终端 标准输出设备
例子
FILE *fp = NULL;
if((fp = fopen("./test1.txt","a+")) == NULL )
{perror("fopen err");exit(-1);
}fputs("bcdefjhigklmn",fp); //向文件输出puts("fputs写入成功");fputs("bcd",stdout);fclose(fp);
长度
求字符串长度–strlen() 库函数 长度
char str[]="zxcvbnmasdfghjklqwertyuiop";printf("string:\"%s\"\n",str);printf("Length:\" %ld\"\n",strlen(str));puts("----------");/* 输出string:"zxcvbnmasdfghjklqwertyuiop"Length:" 26"----------*/
大小
求数据类型或变量占用内存的大小–sizeof() c语音中的关键字 内存
char str2[50]="hellow";char *ptr = str2;printf("sizeof: %ld\n", sizeof(str2));printf("strlen: %ld\n", strlen(str2));puts("~~~~~");printf("sizeof: %ld\n", sizeof(ptr));printf("strlen: %ld\n", strlen(ptr));printf("int-sizeof: %ld\n", sizeof(int)); //4printf("char-sizeof: %ld\n", sizeof(char)); //1puts("----------");/* 输出sizeof: 50strlen: 6~~~~~sizeof: 8strlen: 6int-sizeof: 4char-sizeof: 1----------
*/
拼接
字符串拼接–strcat() strncat()
strcat(str1,str2)—将str2全部放到str1后面。
strncat(str1,str2,num)—将str2前num个放到str1后面。
char str3[50]="hellow ";char str3_1[]="world !";puts("strcat函数:全部追加");strcat(str3,str3_1); //在最后进行添加printf("拼接后字符串为:\"%s\"\n",str3);puts("~~~~~");memset(str3,0x0,7); //str3字符串清零puts("strncat函数:追加的数量");strncat(str3,str3_1,5); //指定添加的个数printf("拼接后字符串为:\"%s\"\n",str3);puts("----------");
/* 输出strcat函数:全部追加拼接后字符串为:"hellow world !"~~~~~strncat函数:追加的数量拼接后字符串为:"world"
*/
拷贝
字符串拷贝 strcpy() strncpy()
strcpy(str1,str2)—将字符串str2全部拷贝到str1。
strncpy(str1,str2,num)—将字符串str2前num个数据拷贝到str1。
都是从头开始拷贝的,没涉及到的位置保持不变。
char str4[50];char str4_1[]="hellow world";puts("strcpy函数 全部复制");strcpy(str4,str4_1);printf("复制后str4: \"%s\"\n",str4);puts("~~~~~");memset(str4,'g',20); //将str4字符串前20位置为'g';puts("strcpy函数 复制的数量");strncpy(str4,str4_1,6);printf("复制后str4: \"%s\"\n",str4);puts("----------");
/* 输出strcpy函数 全部复制复制后str4: "hellow world"~~~~~strcpy函数 复制的数量复制后str4: "hellowgggggggggggggggg"----------
*/
填充
字符串填充 memset() bzero()
memset(str,dat,len)—把str里的数据从头开始填充数据dat(dat会被转换为 unsigned char 类型),共填充len个字节。
bzero(str,len)—将str字符串前len个字节给清零。
char str5[50]="22222222222";printf("str5: %s\n", str5);memset(str5,'3',strlen(str5));printf("memset: %s\n", str5);bzero(str5,strlen(str5));printf("bzero: %s\n",str5);puts("----------");
/* 输出str5: 22222222222memset: 33333333333bzero: ----------
*/
查找
字符串查找 strstr() strchr() strrchr()
char *strstr(const char *str1, const char *str2)—在字符串str1中查找第一次出现字符串str2的位置,并返回指向该位置的指针。如果没有找到,则返回NULL。
char *strchr(const char *s, int c) —在字符串s中查找第一次出现字符c的位置,并返回指向该位置的指针。
char *strrchr(const char *s, int c)-—在字符串s中查找最后一次出现字符c的位置,并返回指向该位置的指针
char str6[]="hello world";char *p = strstr(str6,"world");if(p!= NULL)printf("strstr函数: %s\n",p);elseprintf("strstr函数: 没有找到\n");puts("----------");
/* 输出strstr函数: world
*/
比较
字符串比较 strcmp() strncmp() memcmp()
int strcmp(const char *s1, const char *s2)—比较s1和s2的大小,按照对应想ASCII值来,直到找到不同的字符串或其中一个字符串结束。s1小于s2,返回一个负值。大于时返回一个正值。等于返回0。
int strncmp(const char *s1, const char *s2, size_t n)—比较字符串s1和s2的前n个字符的大小。比较方式与strcmp相同。
int memcmp(const void *s1, const void *s2, size_t n)—比较从s1和s2开始的n个字节的内存区域。比较是按照字节进行的,返回值与strcmp类似。
char str7[]="hello";char str7_1[]="world";printf("strcmp函数: %d\n",strcmp(str7,str7_1));printf("strncmp函数: %d\n",strncmp(str7,str7_1,5));printf("memcmp函数: %d\n",memcmp(str7,str7_1,5));puts("----------");
/* 输出strcmp函数: -120strncmp函数: -120memcmp函数: -1----------
*/