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;
}