C风格字符串的特点:
1. 普通字符型数组
2. 以0为结束元素的字符型数组: C风格字符串
3. sizeof, strlen
4. 用 字符串常量 为 字符型数组 赋值
5. 用 字符串常量 为 字符型指针 赋值
6. 访问字符串中的元素: 取值 赋值
7. C风格字符串的输入输出
8. C风格字符串相关库函数: strlen():计算字符串长度 strcpy():复制字符串 strcat():拼接字符串 strstr():查找子字符串 strupr:()小写转大写 strlwr():大写转小写
一、使用列子如下
#include
#include
#pragma warning(disable:4996)
int main()
{
char* pStr = "Hello C";
char* pTemp = "Hello C, I am C++";
//1、strlen(const char* _Str):计算字符串_Str的长度
int iSize1 = strlen(pStr);
int iSize2 = strlen(pTemp);
printf("pStr iSize:%d pTemp iSize:%d\n", iSize1, iSize2);
//2、strcpy(char* _Dest, const char*, _Source)
// 把字符串_Source复制给_Dest
char pCopy[20] = {0};
strcpy(pCopy, pStr);
printf("pCopy str is %s:\n", pCopy);
//3、strcat(char* _Dest, const char* _Source)
//把字符串_Source拼接到字符串_Dest末尾
char szCat[20] = "I am java,";
strcat(szCat, pStr);
printf("szCat str is %s:\n", szCat);
//4、strstr(char* _Str, const char* _SubStr)
// 判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
char* subStr = strstr(pTemp, pStr);
printf("subStr str is %s:\n", subStr);
//5、strupr(char * _Str)
// 把字符串_Str中的所有小写字符转成大写字符
char szS[] = "I Love You";
char* pUpr = strupr(szS);
printf("pUpr str is %s:\n", pUpr);
//6、strlwr(char * _Str)
// 把字符串_Str中的所有大写字符转成小写字符
char szS2[] = "We are good friend";
char* pLwr = strlwr(szS2);
printf("pLwr str is %s:\n", pLwr);
return 0;
}
二、自己实现以上函数
#include
#include
#define dim(x) (sizeof(x) / sizeof(x[0]))
//strlen 字符串长度
size_t mystrlen(const char *str)
{
size_t nLen = 0;
while (*str++) nLen++;
return nLen;
}
//strcpy
char *mystrcpy(char *strDst, const char *strSrc)
{
if (strDst == NULL || strSrc == NULL) return NULL;
if (strDst == strSrc) return strDst ;
char *temp = strDst;
while (*strDst++ = *strSrc++);
return temp ;
}
//strcat
char *mystrcat(char *strDst, const char *strSrc)
{
char *temp = strDst;
while (*temp++);
temp--;
while (*temp++ = *strSrc++);
return strDst;
}
//strstr
char *mystrstr(const char *s1, const char *s2)
{
if (*s2 == NULL) return (char *)s1;
while (*s1)
{
for (int i = 0; *(s1 + i) == *(s2 + i); i++)
{
if (*(s2 + i + 1) == '\0')
return (char *)s1;
}
s1++;
}
return NULL;
}
//strcmp
int mystrcmp(const char *s1, const char *s2)
{
while (*s1 && *s2 && *s1 == *s2)
{
s1++;
s2++;
}
return (*s1 - *s2);
}
//strupr
char * mystrupr(char *str)
{
char *p = (char *)str;
while (*p)
{
if (*p >= 'a' && *p <= 'z') *p -= 32;
p++;
}
return (char *)str;
}
//strlwr
char * mystrlwr(char *str)
{
char *p = (char *)str;
while (*p)
{
if (*p >= 'A' && *p <= 'Z') *p += 32;
p++;
}
return (char *)str;
}