0
点赞
收藏
分享

微信扫一扫

字符串处理、字符串格式化输入输出(10)

字符串处理

C语言字符串处理

字符串处理是C语言等编程语言最重要最常用的功能之一。

C语言未提供单独的字符串类型,C语言中的字符串是通过字符数组表示的,但该字符数组要求必须以空字符'\0'为结束标识符。

空字符'\0'ASCII码值为0,C语言作为识别一个字符串的终止符。

表示字符串的字符数组长度,实际上比字符串长度要多一个,预留一个字符空间存放终止符'\0'。

字符串表示

字符串常量通过对一串字符使用双引号表示;字符串变量通过数组或指针保存

1.字符串常量

例如:(字符串中可以包含任意转义字符)

"Hello,world."
"你好,世界\n"

2.字符串变量表示

字符串变量表示,一种是保存在数组中,另一种是将首地址保存在字符指针中。

例如:以下三种方式表示字符串"coder"的等价。

char c[6] = {'c','o','d','e','r','\0'}; 
char c[] = {'c','o','d','e','r','\0'};
char c[] = "coder";

char *c = "coder";

字符串的输入输出

字符串输入输出使用 %s 格式控制符号,表示输入输出的是字符串。标注库string.h中含有大量字符串处理函数。

例如:字符串各种表示、输入输出。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void){
char c1[6] = {'c', 'o', 'd', 'e', 'r', '\0'};
char c2[] = {'c', 'o', 'd', 'e', 'r', '\0'};
char c3[] = "coder";

char *c4 = NULL;
c4 = (char *)malloc(sizeof(char)*6);
strcpy(c4, "coder");

char c5[6];
printf("请输入字符串 coder\n");
scanf("%s", c5);

printf("c1:%s\n", c1);
printf("c2:%s\n", c2);
printf("c3:%s\n", c3);
printf("c4:%s\n", c4);
printf("c5:%s\n", c5);

return 0;
}

输入:coder
结果:
c1:coder
c2:coder
c3:coder
c4:coder
c5:coder

字符串处理函数

字符串处理是C语言很重要的功能,标准库<string.h>提供大量的字符串处理函数。常用的如下:

1.字符串复制函数strcpy()

char *strcpy(char*s1, const char *s2);
//将s2字符串复制到s1中。

char *strncpy(char*s1, const char *s2, size_t n);
//将s2字符串前面不超过n个字符复制到s1中。

2.字符串连接strcat()

char *strcat(char*s1, const char *s2);
//在字符串s1末尾添加字符串s2的,连接字符串s1和s2,返回连接的后字符串s1

char *strncat((char*s1, const char *s2, size_t n);
//类似strcat,只不过连接字符串s2的前面n个字符。

3.字符串比较函数strcmp()

int strcmp(const char *s1, const char*s2);
//比较字符串s1和s2的大小,返回一个大于、等于或小于零的整数。

int strncmp(const char *s1, const char*s2, size_t n);
//类似strcmp,只将字符串s1中的前n个字符与字符串s2比较大小。

4.字符串字符查找函数strchr()

char *strchr(const char*s, int c);
//在字符串s中查找字符c第一次出现的位置,当c第一次出现时返回指向字符的指针,未找到返回空指针。

char *strrchr(const char*s, int c);
//在字符串s中查找字符c最后一次出现的位置,当c最后一次出现时返回指向字符的指针,未找到返回空指针。

:空字符'\0'同样作为字符串的一部分。

5.字符串子串查找函数strstr()

char *strstr(const char*s1, const char *s2);
//在s1中查找字符串s2第一次出现的位置,未找到返回空指针。
//若s2为长度为0的字符串,则函数直接返回s1。

6.字符串长度函数strlen()

size_t strlen(const char *s);  //计算字符串s的字符长度。  

:字符串长度不包括终止符'\0'。

字符串格式化输入输出

C语言标准库<stdio.h>中提供一类函数对字符串进行输入输出格式化处理。

字符串输入输出,处理的对象是字符串,从字符串中输入或输出到字符串。

标准输入输出,处理的对象是键盘或显示器,从键盘输入或输出到显示器。

字符串格式化处理函数

通用类型的字符串标准输入输出函数:

int scanf("%s", &str);//字符串标准输入函数

int printf("%s",str);//字符串标准输出函数

按行读取和输入字符串函数:

char *gets(char *s);//即gets(char *s)返回值是字符指针类型
//从标准stdin中(键盘)读取输入的字符串,保存到指定的字符数组s中,字符串末尾自动加入空字符。
//读取成功返回指向数组的指针,出错或无输入返回空指针。

int puts(const char *s);//puts(const char *s)返回值是int整型类型
//将字符串s输出到标准输出stdout(屏幕)中,并遇到空字符"\0"时自动输出换行符\n。
//出错返回EOF,成功返回非负值或0。

例如:

#include <stdio.h>
int main(){
char str[100];
int count = 0;
char *s = gets(str);

count = puts(str);
printf("%d\n", count);

count = puts(s);
printf("%d\n",count);
return 0;
}

运行结果:

输入:abcde  efg
输出:abcde efg
0
abcde efg
0

字符串格式输出函数:将各种类型的参数按照格式输出到指定的字符数组中保存。

int sprintf(char *s, const char *format,...);
//参数s是指向字符数组的指针,format参数是格式化控制字符串。
//返回值是输出的字符数量,不包括s数组中自动加入的空字符。
//作用:各种类型的值转换成一定格式的字符串。

例如:将各种类型的变量值组合转换成特定格式的字符串。

#include <stdio.h>
int main(){
char str[100];
sprintf(str,"%c %d %.2f %.2lf %p",'A',100,100.01f,100.01,str);
printf("%s\n",str);
return 0;
}

输出:A 100 100.01 100.01 0060FE9C

另一种非C89标准规定的输出函数,主流的编译器均提供支持。

int snprintf(char *s, size_t size, const char *format, ...); 
//将参数按照格式控制转换成字符串,其中size规定字符串最大长度,超过size,就会截断输出。

例如:输出的字符串长度最大为10,不包括空字符在内,超出截断。

#include <stdio.h>
int main(){
char str[11];
snprintf(str,10,"%c %d %.2f %.2lf %p",'A',100,100.01f,100.01,str);
printf("%s\n",str);
return 0;
}

输出:A 100 100.

字符串格式输入函数:从字符串中按照格式提取对应的值赋值给参数。

int sscanf(const char *s, const char *format, ...);
//参数s是指向字符串的指针,format参数是格式化控制字符串。
//返回值是输入赋值的参数项数,输入转换失败的,则返回EOF。
//作用:将字符串中各个子串提取转换赋值各种类型的参数变量。

例如:将字符串转换成对应变量赋值。

#include <stdio.h>
int main(){
char str[] = "A 100 100.01 100.01 0062FE3C";
char c;
int i;
float f;
double d;
void *p;
sscanf(str,"%c %d %f %lf %p",&c,&i,&f,&d,&p);
printf("%c %d %.2f %.2lf %p\n",c,i,f,d,p);
return 0;
}

输出:A 100 100.01 100.01 0062FE3C

---------- END----------








举报

相关推荐

0 条评论