- // 判断回文数
- 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 所指向的字符串。
把 src 所指向的字符串复制到 dest。
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
比较两个字符串是否相等
查找子串的一个函数,
今天在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;
- }
从存储区 str2 复制 n 个字节到存储区 str1
从 str2 复制 n 个字符到 str1,
但是在重叠内存块这方面,memmove() 是比 memcpy() 更安全的方法。如果目标区域和源区域有重叠的话,memmove() 能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。如果目标区域与源区域没有重叠,则和 memcpy() 函数功能相同。
即 可以自己复制自己
memcpy 负责拷贝两块独立空间中的数据
重叠内存的拷贝 是用memmove