字符串操作

目录

           访问字符串中的字符

使用C语言的字符串库

strcpy函数

strlen函数

strcat函数

strcmp函数


访问字符串中的字符

假如自定义一个函数来访问,可以不需要在设置第二个参数来指明字符串的长度,而采取在函数体中规定 遇到"\0"结束访问。

//1.统计字符串中空格的数量
int count_spaces(const char s[])
{
    int count = 0;
    for (int i = 0; i < count; i++)
    {
        if (s[i] == ' ')
        {
            count ++;
        }
       return count; 
    } 
}

//2.改进版,更有效、更方便,指针算术运算代替数组取下标
//不再需要i,而是利用s自身来追踪字符串中的位置。
int count_spaces(const char s[])
{
    int count = 0;
    for (; *s !='\0'; s++)
    {
        if (*s == ' ')
        {
            count ++;
        }
       return count; 
    } 
}

(回顾之前的内容,编译器会把数组形式的形参视为指针。所以字符串形参声明为数组或者指针没有任何差异。)

使用C语言的字符串库

一些编程语言提供的运算符可以对字符串进行复制、比较、拼接、选择子串等操作,但是C语言的运算符无法操作字符串。直接复制或者比较字符串会失败。

例如:

char str1[10],str[10];
str1 = "abc";//错误!将数组名用作=的左操作数是非法操作
//初始化的时候是合法的:char str1[10] = "abc";

if(str1 == str2)//错误!这里会当成两个指针来比较大小,会比较两个地址,所以不可能相等

可以使用字符串库来满足我们的需求。

#include <string.h> 

接下来的函数都存在在该库中,因此要使用时,都要添加“#include <string.h> ”头文件

常见函数:
strcpy():复制字符串
strncpy():复制指定长度的字符串
strcat(): 追加字符串
strlen():获取字符串长度(包含'\0')
strnlen():获取字符串长度(不包含'\0')
strcmp():比较字符串
strncmp():比较指定长度字符串
strchr():在字符串中查找指定字符首次出现的位置
strrchr():在字符串中指定字符最后一次出现的位置
strstr():在字符串中查找子串
等等…

查询库函数:Reference - C++ Reference

常用:

strcpy函数

char *strcpy(char *str1, const char *str2)  //把 str2 所指向的字符串复制到 str1。

在这里,strcpy函数的作用是把空字符作为str2字符串的结束符,然后把str2字符串复制到str1,且返回值的类型为“char*”。

但是更贴切的说法是覆盖,执行strcpy函数后,str1里存储的是str2的内容。

但是如果数组 str1 不够大,可能会造成缓冲溢出的情况。

#include <stdio.h>
#include <string.h>
 
int main(void){
 
    char str1[20] = "Hello";
    char str2[6] = "World";
 
    strcpy(str1, str2);
 
    printf("复制后的字符串:%s\n",str1);
 
    return 0;
}
//输出结果:复制后的字符串:world
//看来是覆盖

可以使用strcopy函数解决str1 = "abc";//错误!将数组名用作=的左操作数是非法操作   的问题:strcopy(str1,"abc");

strcopy函数的缺点:不会去检查str2的长度,有可能复制回来造成不可预估的后果。

改进:使用strncopy函数,会有第三个参数来限制所复制的长度。

用法:strncopy(str1,str2,sizeof(str1)); 

这样可以限制str1的长度,是str2装不下也不会往后越界。但是,str1一旦装满,就可能最后一个不是空字符了

改进:再加一行

用法:strncopy(str1,str2,sizeof(str1)-1); 

str1[sizeof(str1)-1]  = '\0';//手动添加空字符。

strlen函数

函数原型:size_t strlen( const char *string );

遇到\0就会停止下来,不计算空字符后的长度。

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

int main(void )
{
	char str[30] = "Hello World!" ;
	printf(" str = %s  strlen(str) = %ld \n",str,strlen(str));
	return 0 ;
}
#include <stdio.h>
#include <string.h>

int main()
{
	char test[50];
	int i = 0;
	printf(" test[] = ");
	for (; i < 26; i++) {  
		test[i] = 'A' + i;
		printf(" %c ",test[i]);
	}
	printf("\n stelen(test) = %ld \r\n",strlen(test));
	return 0 ;
}

strcat函数

函数原型:char * strcat ( char * str1, const char * str2 );

作用:把str2的内容追加到str1的末尾,并返回字符串str1。
实现模式是将str2中的所有字符(连同字符串最后的’\0’一起)加到str1字符串中第一个‘\0’的位置,也就是将str1中第一个’\0’替换成src的第一个字符。

使用起来和strcopy一样。只是结果不同而已。

strcmp函数

strcmp函数是字符串比较函数

函数原型:int strcmp(char *str1,char *str2)

作用:比较字符串str1和str2是否相同,如果相同则返回0,如果不同,前者大于后者则返回1,否则返回-1。

注意:空格符在ASCII码中的位置是32,A~Z是65~90,a~z是97~122。所以空格符小于所以打印字符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wmpreturn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值