C之字符串操作函数


string.h

strlen

不包括'\0'

char str[100] = "123";
int l = strlen(str);	// 3

中文字符:一个顶三

char str[100] = "三";
int l = strlen(str);	// 3

strcmp

第一个和第二个字符串进行比较,对应小于(-1)等于(0)大于(1)

cout << strcmp("a", "b") << endl;	// -1
cout << strcmp("a", "a") << endl;	// 0
cout << strcmp("c", "b") << endl;	// 1

strcpy

注意:

  • 第一个参数:可以调位置。
    先分配:char *str;不行,char *str="123";也不行
  • 第二个参数:
    只能是字符串,不能是字符char:strcat(str, "q");对,strcat(str, 'q');错。
// 修改字符串
char str[100] = "123  456";
strcpy(str, "aa");
printf("%s\n", str);		//aa
// 拼接字符串
char str[100] = "123  456";
strcpy(str + 2, "aa");
printf("%s\n", str);		//12aa

strcat

char str[100] = "123";
strcat(str, "零");
printf("%s\n", str);		// 123零

注意:

  • 第一个参数:不能调位置,就是str
    先分配:char *str;不行,char *str="123";也不行
  • 第二个参数:
    只能是字符串,不能是字符char:strcat(str, "q");对,strcat(str, 'q');错。

拼接字符

char str[100] = "123";
char st[2] = {};
st[0] = 'f';
strcat(str, st);
printf("%s\n", str);		// 123f

strstr

char str[100] = "abcdef-bcd";
char *sub = strstr(str, "bc");
if (sub == NULL)	// 没找到返回NULL
{
	
}
else				// 找到返回第一次出现的字符位置的指针
{
	printf("%s",sub);	// 直接输出sub中从第一次bc开始的后面的,如bcdef-bcd
}

例子:字符串中去掉字符子串:"abcdef-bcd""bc""adef-d"

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

int main()
{
	char str[] = "abcdef-bcd";
	while (1)
	{
		char *sub = strstr(str, "bc");
		if (sub == NULL)
		{
			break;
		}
		else
		{
			char *p = sub;
			for (; *(p + strlen("bc")) != '\0'; p++)
			{
				// printf("%s,[%c],[%c]\n",str, *p, *(p + strlen("bc")));
				*p = *(p + strlen("bc"));
			}
			*p = '\0';
		}
	}
	printf("%s\n", str);
	return 0;
}

sprintf

  • 头文件
#include<iostream> or #include<stdio.h>
  • 完美解决了strcat的写入字符麻烦的问题:
char a[20] = {};
sprintf(a + strlen(a), "%d", 3);	// 3
sprintf(a + strlen(a), "只");		// 3只
  • 例子:
#include<iostream>
using namespace std;

int main()
{
    char a[20];
    sprintf(a,"date");
    cout<<a<<endl;
    //date

	//尾部添加
	/*从下标为4的位置开始,这是'\0'*/
    sprintf(a+4,"%d",123);
    cout<<a<<endl;
    //date123
	
	//改变中间
	/*从下标为4的位置开始,这是'\0'*/
    sprintf(a+4,"%d",456);
    cout<<a<<endl;
    //date456
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值