多语言展示
当前在线:261今日阅读:113今日分享:31

嵌入式C常见笔试题:[1]字符串

好吧,小编要找工作了,这次,小编一定要把常考的笔试题整理出来,留作以后复习使用,同时也给读者提供一些方便。    OK!字符串笔试题,come on!
工具/原料

一张纸,一杆笔,足以,笔试么,肯定是没有电脑的

一.strcat、strcpy、strcmp、strlen函数的实现
1

实现strcat函数格式:extern char *strcat(char *dest,char *src);功能:把src所指字符串添加到dest结尾处并添加'\0';返回:指向dest的指针。实现:char *Mystrcat(char*dest,const char*src){    char *mydest = dest;    while ('\0' != *dest)    {        dest++;    }    while ('\0' !=(*dest++ = *src++))    {        NULL;    }    return mydest;}

2

实现strcpy函数格式:extern char *strcpy(char *dest,char *src);功能:把src所指由NULL结束的字符串复制到dest所指的数组中。返回:指向dest的指针。char *mystrcpy(char *strDest, const char *src);{    char *mydest = strDest; while(*strDest++ = *src++);  return mydest;}

3

实现strcmp函数原型:extern int strcmp(char *str1,char * str2);功能:比较字符串s1和s2;返回:当s1s2时,返回值>0。int mystrcmp(const char*str1,const char*str2){    while(*str1++==*str2++)    {        if(*str1=='\0')        return 0;    }    return (*str1-*str2);}

4

实现strlen函数原型:extern unsigned int strlen(char *s);功能:计算字符串s的(unsigned int型)长度;返回:返回s的长度(请注意是无符号整型),不包括结束符NULL。int mystrlen(const char *str){    int len = 0;    while ('\0' != *str++)    {        len++;    }    return len;}OK,这里补充一种方法,也是笔试常考的题目:不用中间变量,实现strlenint mystrlen(const char *str){    if ('\0'  == *str )    {        return 0;    }    return mystrlen(str+1)+1;}

二.strcpy、strncpy、memcpy、memset
1

strcpy解析extern char *strcpy(char *dest,char *src);1.strcpy只用于字符串的复制。2.strcpy会复制最后的结束符3.函数会一直拷贝字符串的内容,直到遇到‘\0’

2

memcpy解析void  *memcpy(void *s1,  const void *s2,  size_t  n);1.内存复制2.对复制的内容没有限制3.将一个大小为n的内存段的值拷贝到另一内存段中

3

strncpy解析char  *strncpy(char *s2, const char *s1, size_t n);1.该函数用于拷贝count个字符。2.调用完该函数后一定要加上一句:dst[count] = '/0';因为可能拷贝的n个字符中,没有‘\0’

4

memset解析void *memset(void *s, int ch, size_t n);1.将s中前n个字节 用 ch 替换并返回 s。2.常用作字符串等清零。

三.字符串逆序
1

普通逆序char *reverse(char *s){    char *q = s;    while (*q)         q++;    q -=1;    char *p = (char *)malloc(sizeof(char)*(q-s+2));    char *r = p;    while (q >= s)    {         *p++ = *q--;    }    *p = '\0';    return r;}

2

在不允许分配额外的空间的情况下,完成字符串的逆序char *reverse(char *s){    char *p = NULL;    char *q = NULL;    char temp;    p = q = s;        while (*q)    {        q++;    }    q--;       while (p < q)    {        temp = *p;        *p = *q;        *q = temp;    }    return s;}

3

不允许有变量的逆序char *reverse(char *s){    char *p = NULL;    char *q = NULL;    p = q = s;        while (*q)    {        q++;    }    q--;       while (p < q)    {        *p = *p^*q;        *q = *p ^ *q;        *p = *p ^ *q;        p++;q++;    }    return s;}

4

按单词逆序给定一个字符串,按单词将该字符串逆序,比如给定'This is a sentence',则输出是'sentence a is This',为了简化问题,字符串中不包含标点符号。1.按照单词逆序:'sihT si a ecnetnes'2.按照句子逆序:'sentence a is This'void reverseword(char *p,char *q){    while (p < q)    {        *p = *p ^ *q;        *q = *p ^ *q;        *p = *p ^ *q;        p++;        q++;    }    return; }char *reverse(char *s){    char *p = NULL;    char *q = NULL;    p = s;    q = s;        while (*q)    {         if (' ' == *q)        {            reverseword(p,q);            q++;            p = q;        }        else        {             q++;        }    }    reverseword(p,q-1);    reverseword(s,q-1);}

5

递归实现反向输出字符串void reverse(char *str)  {      if(*str != '/0')          reverse(str + 1);      printf('%c', *str);  }

四.其他常见字符串面试题
1

整数转换为字符串,并且不调用itoa1.整数的每一位加上‘0’转换为字符串2.将字符串翻转int main(int argc,char **argv){    int num = 12345;    char p[7];    char q[7];    int i = 0;    int j = 0;    while (num)    {        p[i] = num%10+'0';        i++;        num = num/10;    }    p[i]='\0';    i--;    while (i>=0)    {        q[j] = p[i];        j++;       i--;    }    q[j] = '\0';}

2

字符串转换为整数1.字符串减去‘0’就会隐性转换为int2.再乘以10累加法计算int main(int argc,char **argv){    int i = 0,sum = 0;       char temp[7] = {'1','2','3','4','5','\0'};    while (temp[i])    {        sum = sum*10 + (temp[i]- '0');        i++;    }}

注意事项

笔试题,不要求你写的很准确,或者一定要编译通过,只要大概思路正确,就没有问题

推荐信息