C语言常见字符串面试题 1. 字符串库函数的内部实现 memset库函数的实现 /* * memset - Fill a region of memory with the given value * @s: Pointer to the start of the area. * @c: The byte to fill the area with * @count: The size of the area. */ void *memset(void *s, int c, size_t count) { char *xs = s; while (count--) *xs++ = c; return s; } memcpy库函数的实现 /* * memcpy - Copy one area of memory to another * @dest: Where to copy to * @src: Where to copy from * @count: The size of the area. */ void *memcpy(void *dest, const void *src, size_t count) { char *tmp = dest; const char *s = src; while (count--) *tmp++ = *s++; return dest; } memmove库函数的实现 /* * memmove - Copy one area of memory to another * @dest: Where to copy to * @src: Where to copy from * @count: The size of the area. * Unlike memcpy(), memmove() copes with overlapping areas. */ void *memmove(void *dest, const void *src, size_t count) { char *tmp; const char *s; if (dest = l2) { l1--; if (!memcmp(s1, s2, l2)) return (char *)s1; s1++; } return NULL; } 常见字符串面试题 1)写出在母串中查找子串出现次数的代码. int count1(char* str, char* s) { char* s1; char* s2; int count = 0; while(*str!='/0') { s1 = str; s2 = s; while(*s2 == *s1 s1++; } if(*s2 == '/0') count++; str++; } return count; } 2)查找第一个匹配子串位置,如果返回的是s1长度len1表示没有找到 size_t find(char* s1,char* s2) { size_t i=0; size_t len1 = strlen(s1) size_t len2 = strlen(s2); if(len1-len2 #include #include char *commanstring(char shortstring[], char longstring[]) { int i, j; char *substring=malloc(256); if(strstr(longstring, shortstring)!=NULL)//如果……,那么返回shortst ring return shortstring; for(i=strlen(shortstring)-1;i0; i--) //否则,开始循环计算 { for(j=0; jstrlen(str2)) //将短的字符串放前面 comman=commanstring(str2, str1); else comman=commanstring(str1, str2); printf(“the longest comman string is: %s/n“, comman); } 6) 判断一个字符串是不是回文 int IsReverseStr(char *str) { int i,j; int found=1; if(str==NULL) return -1; char* p = str-1; while(*++p!= '/0'); --p; while(*str==*p if(!*cpSource) break; } ++cpSource; } return cpDest; }
展开阅读全文