什么是C语言中的字符串
字符串或串(String)是由数字、字母、下划线组成的一串字符。通常放在常量字符串中或者字符数组中。C语言中以 ‘\0’ 来作为字符串的结束标记。
1.strlen
功能:字符串求长
计算给定字符串的(unsigned int型)长度,不包括 ‘\0’ 在内,参数指向的的字符串必须以 ‘\0’ 结束,返回值为 size_t 无符号的。
用法:
size_t strlen ( const char * str )
头文件:string.h
模拟实现:
//非递归
int my_strlen1(const char *str)
{
int count = 0;
while(*str != '\0')
{
count++;
str++;
}
return count;
}
//递归
int my_strlen2(const char *str)
{
if (*str == '\0')
{
return 0;
}
else
return 1 + my_strlen2(str + 1);
}
运行结果:
char str[100] = {0};
printf("请输入字符串:");
scanf("%s",&str);
printf("字符串长度为:%d\n",my_strlen1(str));
printf("字符串长度为:%d\n",my_strlen2(str));
2.strcpy
功能:字符串串复制
把源字符串复制到目标空间。源字符串必须以 ‘\0’ 结束,目标空间必须可变,src 和 dest 所指内存区域不可以重叠且 dest 必须有足够的空间来容纳 src 的字符串。
用法:
char * strcpy ( char * destination, const char * source )
头文件:string.h
模拟实现:
char *my_strcpy(char *dest, const char *src)
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
while((*dest++ = *src++))
{
;
}
return ret;
}
运行结果:
char str1[] = "i im a boy";
char str2[100] = {0};
printf("src:%s\n",str1);
printf("dest:%s\n",my_strcpy(str2, str1));
3.strcat
功能:字符串连接
把两个字符串连接起来。源字符串必须以 ‘\0’ 结束,目标空间必须可变。把 src 所指字符串添加到 dest 结尾处(覆盖 dest 结尾处的 ‘\0’ ), dest 必须有足够的空间来容纳 src 的字符串
用法:
char * strcat ( char * destination, const char * source )
头文件:string.h
模拟实现:
char *my_strcat(char *dest, const char *src)
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
while(*dest != '\0')
{
dest++;
}
while((*dest++ = *src++))
{
;
}
return ret;
}
运行结果:
char str1[100] = "i im";
char str2[] = " a boy";
printf("%s\n",my_strcat(str1, str2));
4.strcmp
功能:字符串比较
设这两个字符串为str1,str2,
看ASCII码
若str1=str2,则返回零;
若str1
用法:
int strcmp ( const char * str1, const char * str2 )
头文件:string.h
模拟实现:
int my_strcmp(const char *str1, const char *str2)
{
int ret = 0;
assert(*str1 != NULL);
assert(*str2 != NULL);
while( ! (ret = *(unsigned char *)str1 - *(unsigned char *)str2) && *str2)
{
str1++;
str2++;
}
if (ret < 0)
ret = -1;
else if (ret > 0)
ret = 1;
return (ret);
}
运行结果:
char *str1 = "abcde";
char *str2 = "abcde";
char *str3 = "abcef";
printf("%d\n",my_strcmp(str1, str2));
printf("%d\n",my_strcmp(str1, str3));
printf("%d\n",my_strcmp(str3, str2));
5.strchr
功能:查找字符串str中首次出现字符c的位置
返回首次出现c的位置的指针,返回的地址是被查找字符串指针开始的第一个与Val相同字符的指针,如果str中不存在c则返回NULL。
用法:
const char * strchr ( const char * str, int character )
char * strchr ( char * str, int character )
头文件:string.h
模拟实现:
char *my_strchr(char *str, char c)
{
assert(str != NULL);
while(*str != '\0' && *str != c)
{
++str;
}
return *str == c ?str:NULL;
}
运行结果:
char *str = "abcdef";
printf("%s\n",my_strchr(str, 'c'));
6.strstr
功能:在字符串中查找
str1: 被查找目标 string expression to search
str2: 要查找对象 The string expression to find
返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。
用法:
const char * strstr ( const char * str1, const char * str2 );
char * strstr ( char * str1, const char * str2 )
头文件:string.h
模拟实现:
char *my_strstr(const char *dest, const char *src)
{
assert(dest);
while (*dest)
{
while ((*dest != *src) && (*dest != 0))
dest++;
while (*dest == *src)
{
const char*pdest = dest;
const char*psrc = src;
while(*pdest == *psrc)
{
pdest++;
psrc++;
}
if (*psrc == 0)
return (char*)dest;
else
dest++;
}
}
return NULL;
}
运行结果:
char *str1 = "qwertyuiop";
char *str2 = "yui";
char *str3 = "ery";
printf("%s\n", my_strstr(str1, str2));
printf("%s\n", my_strstr(str1, str3));