【库函数】复习小结

发布于:2023-01-01 ⋅ 阅读:(495) ⋅ 点赞:(0)

1.sprintf函数作用为将整型转化为字符串类型

// 判断回文数
bool isPalindrome(int x)
{
    char a[200],b[200]={0};
    sprintf(a,"%d",x);
    int c = strlen(a)-1;
    for (int i = 0; a[i]!='\0'; i++)
    b[c--] = a[i];
    if(strcmp(a,b)==0)
    return true;
    else
    return false;
}

C 库函数 int sprintf(char *str, const char *format, ...) 发送格式化输出到 str 所指向的字符串

2. strcpy       char *strcpy(char *dest, const char *src) 

把 src 所指向的字符串复制到 dest

3.strcat         char *strcat(char *dest, const char *src) 

把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。

4.strcmp  strcmp(string1,string2)

比较两个字符串是否相等

5.strstr  (const char* str1, const char* str2)

查找子串的一个函数,

今天在leetcode上又碰到了这种模拟的题目,刚好写下了。

char* my_strstr(const char* str1, const char* str2)
{
    assert(str1 && str2);
    char *cp = (char*) str1;  //利用cp记录 str1的位置信息
    char *s1, *s2;
    if (!*str2)// 与*s2 == '\0' 等价
        return((char*)str1); 
    while (*cp)
    {
         s1 = cp;
         s2 = (char*) str2;
         while (*s1 && *s2 && !(*s1-*s2))//循环直到s1 s2 结束或 s1 != s2   
                 s1++, s2++;
         if (!*s2)
                 return(cp);
         cp++;
   }
        return(NULL);
}
int main()
{
    char email[] = "2676887386@qq.com";
	char substr[] = "qq";
	char* ret = my_strstr(email, substr);
	if (ret == NULL)
	{
		printf("不存在\n");
	}
	else
	{
		printf("%s\n",ret);
	}
}
int strStr(const char* haystack, const char* needle) {
    int end1 = 0;
    int end2 = 0;
    int len1 = strlen(haystack);
    int len2 = strlen(needle);
    if(len2 > len1)
    {
        return -1;
    }
    int tmp = 0;
    int flag = 0;
    while (end2 < len2 && end1 < len1)
    {
        if (haystack[end1] != needle[end2])
        {
            if (flag == 0)
                end1++;
            if (flag == 1)
            {
                end1 = tmp;
                end2 = 0;
                flag = 0;
                tmp = 0;
            }
        }
        else if (haystack[end1] == needle[end2])
        {
            if (flag == 0)// 利用 tmp 记录第一次相等的位置
            {
                tmp = end1 + 1;
                if(len1 - end1 < len2)
                {
                    tmp = 0;
                    break;
                }
            }
            end1++;
            end2++;
            flag = 1;
        }
    }
    return tmp - 1;
}

6.memcpy      void *memcpy(void *str1, const void *str2, size_t n) 

从存储区 str2 复制 n 个字节到存储区 str1

7.memmove   void *memmove(void *str1, const void *str2, size_t n) 

从 str2 复制 n 个字符到 str1

但是在重叠内存块这方面,memmove() 是比 memcpy() 更安全的方法。如果目标区域和源区域有重叠的话,memmove() 能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。如果目标区域与源区域没有重叠,则和 memcpy() 函数功能相同。

即 可以自己复制自己

memcpy 负责拷贝两块独立空间中的数据

 重叠内存的拷贝 是用memmove

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到