c语言编程-字符串处理
1、字符串处理
1.1 字符串输入/输出
【输出】
- puts 函数
puts()函数用来向标准输出设备(屏幕、显示器)输出字符串并自行换行。把字符串输出到标准输出设备,将’ \0 ‘转换为换行符’ \n ’
- 测试
/* puts函数-字符串输出*/
void str_puts(char *str)
{
int ret = 0;
ret = puts(str);//把字符串输出到标准输出设备,并且将'\0'转换成'\n'
if(ret>=0)//成功返回值是一个非负数
{
puts("success!");
}
}
- putchar 函数
putchar()函数可以把参数 c 指定的字符(一个无符号字符)输出到标准输出设备,其输出可以是一个字符,可以是介于 0~127 之间的一个十进制整型数(包含 0 和 127,输出其对应的 ASCII 码字符),也可以是用 char 类型定义好的一个字符型变量
- 测试
/* putchar函数-输出一个字符*/
void str_putchar(void)
{
putchar('A');
}
【输入】
- gets 函数
gets()函数用于从标准输入设备(譬如键盘)中获取用户输入的字符串
- 测试
void Get_gets(void)
{
char str[100] = {0};
char *pstr = NULL;
pstr = gets(str);
puts(pstr);
}
- getchar 函数
getchar()函数用于从标准输入设备中读取一个字符
- 测试
void Get_getchar(void)
{
char str[100] = {0};
int i = 0;
while(str[i-1]!='#')
{
str[i] = getchar();
i++;
}
puts(str);
}
- 总结:字符串输入输出的库函数非常多,在实际的编程之中需要根据实际情况来进行选择。
1.2 字符串长度
1.3 字符串拼接
【1.strcat】函数原型如下
#include <string.h>
char *strcat(char *dest, const char *src);
【参数说明】
- dest:目标字符串
- src:源字符串
- 返回值:返回
strcat会将源字符串追加到dest所指向的字符串末尾,所以必须要保证dest有足够的存储空间来存储两个字符串,否则会导致溢出错误:dest末尾的’\0’结束符会被覆盖,而src末尾的结束字符’\0’会被一起复制过去,最终的字符串只有一个’\0’。 - 测试
static void Str_cat(void)
{
char src[] = "zhangdan";
char dest[100] = "tianjiangtao love ";
strcat(dest, src);
puts(dest);
}
- 输出
tianjiangtao love zhangdan
【2.strncat】函数原型如下
#include <string.h>
char *strncat(char *dest, const char *src, size_t n);
- strcat与strncat的区别在于,strncat可以指定源字符串追加到目标字符串的字符数量
【参数说明】
- dest:目标字符串
- src:源字符串
- n:要追加的最大字符串数
- 返回值:返回指向目标字符串dest的指针。
如果源字符串src包含n个或更多个字符,则strncat()将n+1个字节追加到dest目标字符串。 - 测试
static void str_Ncat(void)
{
char src[] = "zhangdandan";
char dest[100] = "tianjiangtao love ";
strncat(dest, src, 8);
puts(dest);
strncat(dest,src,sizeof(src));
puts(dest);
}
- 输出
tianjiangtao love zhangdan
tianjiangtao love zhangdanzhangdandan
1.4 字符串拷贝
- c语言库函数中提供了strcpy()函数和strncpy()函数用于实现字符串的拷贝。
【1.strcpy】函数原型如下
#include <string.h>
char *strcpy(char *dest, const char *src);
【参数说明】
- dest:目标字符串
- src:源字符串
- 返回值:返回指向目标字符串dest的指针
strcpy()会把src(必须包含结束字符’\0’)指向的字符串复制(包含字符串结束字符)到dest,所以必须保证dest指向的内存空间足够大,能够容纳下src字符串,否则会导致溢出错误。 - 测试:
static void str_cpy(void)
{
char src[] = "zhangdandan l love you!";
char dest[100] = {0};//初始化
strcpy(dest, src);
puts(dest);
}
- 输出
zhangdandan l love you!
【2.strncpy】函数原型如下
#include <string.h>
char *strncpy(char *dest, const char *src, size_t n);
strncpy()与strcpy()的区别在于,strncpy()可以指定从源字符串src复制到目标字符串dest的字符数量。
【参数说明】
- dest:目标字符串
- src:源字符串
- n:src中复制的最大字符串
- 返回值:返回值指向目标字符串的dest的指针
把src所指向的字符串复制到dest,最多复制n个字符,当n小于或等于src字符串长度的时候,复制不包括’\0’;当复制大于src的字符串长度时,则会将字符串的结束符号’\0’也一并拷贝进去,必须保证dest指向的内存空间足够大,否则拷贝的时候会导致溢出错误。
【测试】
static void str_ncpy(void)
{
char src[] = "zhangdandan l love you!";
char dest[100] = {0};//初始化
strncpy(dest, src, 18);
puts(dest);
}
- 输出
zhangdandan l love
1.5 字符串填充
- 常用的就是memset(void *s, int c, size_t n)和bzreo(void *s, size_t n),使用方法略。
1.6 c 字符串比较
- C 语言函数库提供了用于字符串比较的函数 strcmp()和 strncmp()
1.6.1【strcmp】函数原型如下
#include <string.h>
int strcmp(const char *s1, const char *s2);
【参数以及返回值说明】
- s1:进行比较的字符串1
- s2:进行比较的字符串2
返回值:
1.如果返回值小于0,则表示s1大于s2
2.如果返回值大于0,则表示s1大于s2
3.如果返回值等于0,则表示两个字符串相等
进行比较时,主要是通过比较字符串中的字符对应的ASCII码的值,直到出现不同的字符或者某一字符串已经到达末尾(遇见了’\0’)。
【测试略】
1.6.2【strncmp】函数原型如下
#include <string.h>
int strncmp(const char *s1, const char *s2, size_t n);
【参数以及返回值说明】
- s1:参与比较的第一个字符串
- s2:参与比较的第二个字符串
- n:最多比较钱n个字符
【返回值】返回值含义和strcmp()相同
【测试略】
1.7 字符串查找
- c语言库函数中也提供了一些用于字符串查找的函数
1.7.1 strchr函数
- 使用strchr函数可以查找到给定字符串当中的某一个字符,函数原型如下:
#include <string.h>
char *strchr(const char *s, int c);
【参数说明】
- s:给定的目标字符串
- c:需要查找的字符
【返回值】
- 返回字符c第一次在字符串中出现的位置,如果没有找到就返回NULL。
字符串结束符’\0’也作为字符串的一部分,因此如果将参数指定为’\0’,则函数将返回指向结束符的指针,返回值指向这个位置,如果找不到字符c就返回NULL。
【测试】
static void str_chr(void)
{
char src[] = "zhangdandan l love you!";
char *p = NULL;
p = strchr(src,'y');
if(p!=NULL)
{
printf("%c\n",*p);
printf("%ld\n",p - src);//字符第一次出现的位置
}
}
- 输出
y
19
1.7.2 strstr函数
- 原型
#include <string.h>
char *strstr(const char *haystack, const char *needle);
【参数说明】
- haystack:目标字符串
- needle:需要查找的字符串
【返回值】
- 如果包含,则返回该字符串首次出现的位置;否则返回NULL
【测试】
static void str_str(void)
{
char src[] = "zhangdandan l love you!";
char *p = NULL;
p = strstr(src,"love");
if(p!=NULL)
{
printf("%s\n",p);
printf("%ld\n",p - src);//字符第一次出现的位置
}
}
- 输出
love you!
14
1.8 字符串与数字互相转换
1.8.1 字符串转数字
- atoi()将字符串转换为int类型,原型如下:
#include <stdlib.h>
int atoi(const char *nptr);
【参数说明】
- nptr:要转换的数字字符串
【返回值】
- 返回转换之后得到的int类型数据
只能用于转换十进制表示的数字字符串,0~9.
【测试】
static void str_atoi(void)
{
char src[] = "5201314";
int number = atoi(src);
printf("%d\n",number);
}
- 输出
5201314
1.8.2 数字转字符串(大部分略)
- sprintf()
【测试】
static void int_str(void)
{
int number = 5201314;
char str[20] = {0};
sprintf(str,"%d",number);
printf("%s\n",str);
}
【输出】
5201314