(以下操作均需要<string.h>的头文件)ok let`s go!
Part 1.求字符串的长度strlen
const表示不可以修改 指针所指向的内容。
长度为6(找到\0)
ps.利用函数自己做一个strlen!(如下)
#include<stdio.h>
unsigned int Mystrlen(const char* str)
{
int n = 0;//用n来记数,反映字符串的长度
while (*str!='\0')
{
str++;//指针往后偏移扫描至\0结束
n++;
}
return n;
}
int main()
{
char* str = "Hello \0World";
printf("%d",Mystrlen(str));
return 0;
}
char* str = "Hello \0World";
char sz[20] = { 's','f','r','\0' ,'7'};
printf("%d",strlen(str));
printf("%d",Mystrlen(sz));
数组名->指针。
Part2.抄一字符串strcpy/strncpy
char* p = "HELLOWORLD";
char sz[20] = { 'h','s','e','w','9','1','2','3','4','5','6','7','8' };
strcpy(sz,p);
printf("%c", sz[1]);
是copy指针p里面的字符串存到数组sz[]里面,会将前11个也就是hsew9覆盖掉,一共带进来11个字符,因为‘\0’的存在。剩下的7和8保持不动。
注意!!!copy的容器里一定要够放,不然就会造成溢出,后面的内存就会被修改
于是我们可用更安全的strncpy
char* p = "HELLOWORLD";
char sz[8] = { 'h','s','e','w','1','2','3','4'};
strncpy(sz,p,7);
printf("%c", sz[7]);
注意strncpy的用法。7表示copy的字符个数
‘4’并不会被覆盖!‘\0’不会进来
Part3.字符串的连接strcat
char* str = "HELLOWORLD";
char sz[100] = { 'h','s','e','w','1','2','3','4'};
char*p=strcat(sz, str);
注意strcat的写法:左边只能是sz而非str(str是一个字符串常量,没有可以存储的空间!!!)
其次,str里面的字符串会接到sz[ ]之后
而且,连接后的地址任然是sz的原地址,而非新地址!!!
Part4.字符串比较strcmp
char* str1 = "HELLOWORLD";
char* str2 = "He3456789";
if (0 == strcmp(str1, str2))
printf("str1等于str2");
else if (strcmp(str1, str2) > 0)
printf("str1大于str2");
else
printf("str1小于str2");
比较的原理:逐个比较,第一个谁大那就结束,谁大。若第一个相同,看第二个,谁大,谁大那就谁大,依次类推。如图str2>str1。
该函数会有返回值:等0 左大于右>0 右大于左<0
Part5.字符查找strchr
char* str1 = "HELLOWORLD";
char* p = strchr(str1, 'O');
printf("%s", p);
此段代码输出OWORLD,由此我们可以看出来这玩意找到第一个之后,后面的字符全会搬下来。
若寻找‘f’(字符串里面根本没有),则它返回一个空指针NULL.
那么,我们可以做一个函数,来索引要找的字符的位置在哪。
#include<stdio.h>
#include<string.h>
int Mystrchr(const char* p, char ch)
{
int n = 1;//显示该字符的位置。
while (*p != '\0')
{
if (*p == ch)
return n;
p++;//指针偏移找字符
n++;
}
return -1;//表示该字符在字符串中并不存在。
}
int main()
{
char* p = "HelloWorldH";
int position = Mystrchr(p,'H');
printf("%d", position);
return 0;
}
当然只能找到第一个所在位置,第二个不会被返回出来。那该如何做,等我想想问问的!(问!!)
Part6.字符串查找strstr
函数原型char* strstr(char const *str,char const *s2)
char* p = "HelloWorldH";
char* k = strstr(p, "lo");
printf("%s",k);
和strchr一样找到lo后直接把后面搬出来,所以输出loWorldH.
我们同样可以自己用函数实现这个功能。