C语言字符串笔试题含答案

目录面试题1:使用库函数将数字转换为字符串 出现频率:***面试题2:不使用库函数将整数转换成字符串 出现频率:*****面试题3:使用库函数将字符串转换为数字 出现频率:****面试题4:不使用库函数将字符串转换为数字 出现频率:****面试题5:编程实现strcpy函数 出现频率:****面试题6:编程实现memcpy函数 出现频率:****面试题7:strcpy与memcpy的区别 出现频率:****面试题8:改错----数组越界 出现频率:****...
摘要由CSDN通过智能技术生成

目录

面试题1:使用库函数将数字转换为字符串  出现频率:***

面试题2:不使用库函数将整数转换成字符串  出现频率:*****

面试题3:使用库函数将字符串转换为数字  出现频率:****

面试题4:不使用库函数将字符串转换为数字  出现频率:****

面试题5:编程实现strcpy函数  出现频率:****

面试题6:编程实现memcpy函数  出现频率:****

面试题7:strcpy与memcpy的区别  出现频率:****

面试题8:改错----数组越界  出现频率:****

面试题9:分析程序---数组越界  出现频率:***

面试题10:分析程序---打印操作可能产生数组越界

面试题11:编程实现计算字符串的长度  出现频率:*****

面试题12:编程实现字符串中子串的查找  出现频率:*****

例:strstr("12345","34")返回值为2,在2号位置找到字符串34

面试题13:编程实现字符串中各单词的翻转  出现频率:***

            例:"I am from Shanghai"倒置为"Shanghai from am I“

面试题14:编程判断字符串是否为回文  出现频率:*****

           例:单词"level"是回文

面试题15:编程实现strcmp库函数  出现频率:*****

面试题16:编程查找两个字符串的最大公共子串  出现频率:***

          例:两个字符串A="aocdfe",B="pmcdfa",输出结果“cdf”

面试题17:不使用printf,将十进制数以二进制和十六进制的形式输出  出现频率:***

面试题18:编程实现转换字符串、插入字符的个数  出现频率:****

面试题19:字符串编码例题  出现频率:**

面试题20:反转字符串,但其指定的子串不反转  出现频率:***

编程题21:编写字符串反转  出现频率:****

         例:输入"abcd",输出应为"dcba"

面试题22:编程实现任意长度的两个正整数相加  出现频率:****

面试题23:编程实现字符串的循环右移  出现频率:****

          例:"abcdefghi",如果n=2,移位后应该"hiabcdefg"

面试题24:删除指定长度的字符  出现频率:****

面试题25:字符串的排序和交换  出现频率:***

面试题26:编程实现删除字符串中所有指定的字符  出现频率:****

面试题27:分析代码----使用strcat连接字符串  出现频率:***

面试题28:编程实现库函数strcat  出现频率:*****

编程题29:编程计算含有汉字的字符串长度 出现频率:**

面试题30:编程实现字符串的替换  出现频率:***  


面试题1:使用库函数将数字转换为字符串

考点:c语言库函数中数字转换为字符串的使用

出现频率:***

解析:

itoa 将整型值转换为字符串

ltoa 将长整型值转换为字符串

ultoa 将无符号长整型值转换为字符串

gcvt 将浮点型数转换为字符串,取四舍五入

ecvt 将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点

fcvt 以指定位数为转换精度,其余同ecvt

答案:可以使用atoi系列的函数将数字转换为字符串

面试题2:不使用库函数将整数转换成字符串

考点:对数字转换为字符串,相关ASCII码的理解

出现频率:*****

答案:

void int2str(int n, char *str)

{

char buf[10] = "";

int i = 0;

int len = 0;

int temp = n < 0 ? -n:n;

if(NULL == str)

{

return;

}

while(temp)

{

buf[i++] = (temp % 10) + '0';

temp = temp / 10;

}

len = n < 0 ? ++i : i; //如果n是负数,则多需要一位来存储负号

str[i] = 0;

while(1)

{

i--;

if(buf[len-i-1] == 0)

{

break;

}

str[i] = buf[len-i-1];

}

if(0 == i)

{

str[i] = '-';

}

}





int main()

{

int nNum;

char p[10];

cout << "please input an integer:";

cin >> nNum;

cout << "output:";

int2str(nNum, p);

cout << p << endl;

return 0;

}

面试题3:使用库函数将字符串转换为数字

考点:c语言库函数中字符串转换为数字的使用

出现频率:****

解析:

atof 将字符串转换为双精度浮点型值

atoi 将字符串转化为整型值

atol 将字符串转换为长整型值

strtod 将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字

strtol 将字符串转换为长整型值,并报告不能被转换的所有剩余数字

strtoul 将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字

面试题4:不使用库函数将字符串转换为数字

考点:对字符串转换为数字,相关ASCII码的理解

出现频率:****

答案:

int str2int(const char *str)

{

int temp = 0;

const char *ptr = str;

if(*str == '-' || *str == '+')

{

str++; //如果第一个字符是正负号,则移到下一个字符

}

while(*str != 0)

{

if((*str < '0') || (*str > '9'))

{

break;

}

temp = temp * 10 + (*str-'0');

str++;

}

if(*ptr == '-')

{

temp = -temp;

}

return -temp;

}



int main()

{

int n = 0;

char p[10] = "";

cin.getline(p, 20); //从终端获取一个字符串

n = str2int(p); //把字符串转换为整型数

cout << n << endl;

return 0;

}

面试题5:编程实现strcpy函数

考点:字符串复制的实现

出现频率:****

已知strcpy函数的原型是:

char *strcpy(char *strDest, const char *srtSrc);

(1)不调用库函数,实现strcpy函数

(2)解释为什么要返回char *

答案:

char *strcpy(char *strDest, const char *strSrc)

{

if(strDest == NULL || strSrc == NULL)

{

return NULL;

}

char *strDestCopy = strDest;

while((*strDest++ = *strSrc++) != '\0');

return strDestCopy;

}





int getStrLen(const char *strSrc)

{

int len = 0;

while(*strSrc++ != '\0')

{

len++;

}

return len;

}





int main()

{

char strSrc[] = "hello world!";

char strDest[20];

int len = 0;

len = getStrlen(strcpy(strDest, strSrc));

printf("strDest:%s\n, strDest);

printf("Length of strDest:%d\n", len);

return 0;

}

为什么返回值是char *,是为了使用链式表达式,由于在strcpy中使用了char *返回类型,因此

可以在代码中可以通过链式表达式来同时做两个操作,这样不仅调用方便,而且程序结构简洁明了。

面试题6:编程实现memcpy函数

考点:内存复制的实现

出现频率:****

答案:

#include <assert.h>

void *memcpy2(void *memTo, const void *memFrom, size_t size)

{

assert((memTo != NULL) && (memFrom != NULL)); //memTo和memFrom必须有效

char *tempFrom = (char *)memFrom;

char *tempTo = (char *)memTo;

while(size-- > 0)

{

*tempTo++ = *tempFrom++;

}

*tempTo = '\0';

return memTo;

}

面试题7:strcpy与memcpy的区别

考点:字符串复制与内存复制之间的区别

出现频率:****

答案:

1、复制的内容不同,strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、

整型、结构体等

2、复制的方法不同,strcpy不需要指定长度,它是遇到字符串结束符'\0'而结束的,而memcpy

则是根据其第三个参数决定复制的长度

3、用途不同,通常在复制字符串时用strcpy,而若需要复制其他类型数据,则一般用memcpy

面试题8:改错----数组越界

考点:数组越界出现的问题

出现频率:****

试题1:

void test1()

{

char string[10];

char *str1 = "0123456789";

strcpy(string, str1);

}

试题2:

void test2()

{

char string[10], str1[10];

int i;

for(i = 0; i < 10; i++)

{

str1[i] = 'a';

}

strcpy(string, str1);

}

试题3:

void test3(char *str1)

{

char string[10];

if(strlen(str1) <= 10)

{

strcpy(string, str1);

}

}

答案:这三道题都有数组越界的问题

试题1:

void test1()

{

char string[10]; //改成:char string[11];

char *str1 = "0123456789";

strcpy(string, str1);

}

试题2:

void test2()

{

char string[10], str1[10]; //改成:char string[11], str1[11];

int i;

for(i = 0; i < 10; i++)

{

str1[i] = 'a';

}

strcpy(string, str1);

}

试题3:

void test3(char *str1)

{

char string[10];

if(strlen(str1) <= 10) //改成:if(strlen(str1) < 10)

{

strcpy(string, str1);

}

}

面试题9:分析程序---数组越界

考点:不当的循环操作导致数组越界

出现频率:***

下面这个程序执行后会出现什么错误或者效果

#define MAX 255

int main()

{

unsigned char A[MAX

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值