c语言经典面试题简单面试题

难得的c语言经典面试题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
难得的c语言经典面试题
上传于||文档简介
&&难​得​的​c​语​言​经​典​面​试​题
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩8页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢C语言简单面试题_百度知道常见C语言面试题&一&
&转载自CSDN,看着写的都很工整,因此也没有测试。明天挨个看看,如有问题会加以更正。主要是自己也想用,就转载了过来,望原作者见谅!!!&
常见C语言面试题之一:字符串代替、字符串转换整数
#include "stdafx.h"
//--------字符替代问题
char* Translate(char* pSrc, const char cFindChar, const char*
pReplaceStr, char* pTag)&
char* p = NULL ;&
int lLen = (int)strlen (pReplaceStr) ;&
&&&&&&&&&&
for (p = pS *p!='/0'; p++)
&&&&&&&&&&&&&
if (cFindChar == *p)&
&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&
strcpy(pTag, pReplaceStr) ;&
&&&&&&&&&&&&&&&&&
pTag += lL&
&&&&&&&&&&&&&
&&&&&&&&&&&&&
&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&
*pTag++ = *p;&
&&&&&&&&&&&&&
return pT&
//--------字符串转换为整数
int myAtoi(const char* s){
&&& int result =
&&& int flag =
&&& int i =
while(isspace(s[i]))
&&& if(s[i] ==
flag = -1;
&&& if(s[i] ==
&&& while(s[i]
if((s[i] & '9') || (s[i] &
int j = s[i] - '0';
result = 10 * result +
&&& result =
&&& return
//--------整数转换为字符串
&&& void itoa
(int n,char s[])
&&&&&&&&//下面注释的是原作者的代码,觉得有问题,
//我修改后
if((sign=n)&0)//记录符号
&&&&&&&&&&
n=-n;//使n成为正数
&&&&&&&&&&
&&&&&&&&&&
s[i++]=k+'0';//取下一个数字
}while ((n/=10)&0);//删除该数字
if(sign&0)
&&&&&&&&&&
s[i++]='-';
s[i]='/0';
for(j=i;j&=0;j--)//生成的数字是逆序的,所以要逆序输出
&&&&&&&&&&
printf("%c",s[j]);
printf("/n");
int _tmain(int argc, _TCHAR* argv[])
//--------Translate----------
char&& szSrc[]
=&& "Hello
char&& szTag[256]=
char&& szRep[]
="(***)";&&&&
result[256] = {0};
Translate(szSrc,'o',szRep,szTag);&&&&&&
&&& for(unsigned
int i=0;i&strlen(szTag);i++) result[i] =
printf("%s/n",szTag);
printf("%s/n",result);
//-----------------------
&&& int i =
atoi("&&& -321"
printf("%d/n",i);
ch[256]={0};
&&& itoa(-23456,
&&& return
常见C语言面试题之二:浮点数转换为字符串
#include "stdafx.h"
#include "stdlib.h"
char *F2S(double d, char* str)
& char str1[40];
& int j=0,k,i;
& i = (int)d;& //浮点数的整数部分
& //d = d-(int)d;
& while(i&0)
&&& str1[j++] =
& for(k=0;k&j;k++)
&&& str[k] =
str1[j-1-k]; //
& str[j++] = '.';
& d -= (int)d;
& for(i=0;i&10;i++)
&&& str[j++] =
(int)d+'0';
& while(str[--j]=='0');
&&& str[++j] =
int _tmain(int argc, _TCHAR* argv[])
&&& double d =
& char str[20];
& char *p = F2S(d, str);
& printf("%s/n",str);
& printf("%s/n",p);&
& return 0;
常见C语言面试题之三:字符串替代
#include "stdafx.h"
#include "string.h"
#include "malloc.h"
char *replace(char *source, char *sub, char *rep)
& //*pc1是复制到结果result的扫描指针
& //*pc2是扫描source 的辅助指针
//*pc3寻找子串时,为检查变化中的source是否与子串相等,是指向sub的扫描指针
& //找到匹配后,为了复制到结果串,是指向rep的扫描指针
& char *pc1,*pc2,*pc3;
& int isource, isub,
& isource = (int)strlen(source);
& isub = (int)strlen(sub);
& irep = (int)strlen(rep);
& if(*sub==NULL)
&&& return
strdup(source);
& //申请结果串需要的空间
& int size = (int)(
(irep&isub)?(float)strlen(source)/isub*irep+1 :
isource );
& result = (char
*)malloc(size*sizeof(char));
& pc1=//为pc1依次复制结果串的每个字节作准备
& while(*source !=NULL)
//为检查source与sub是否相等作准备,为pc2,pc3 赋初值
//出循环的(任一)条件是:
//*pc2不等于*pc3(与子串不相等)
//*pc2到源串结尾
//*pc3到源串结尾(此时,检查了全部子串,source处与sub相等)
while(*pc2==*pc3 && *pc3!=NULL
&& *pc2!=NULL)
pc2++;pc3++;
//如果找到了子串,进行以下处理工作
if(*pc3==NULL)
//将替代串追加到结果串
while(*pc3!=NULL)
*pc1++ = *pc3++;
source=pc2;
//检查source与sub相等的循环结束后
//* pc2 对应的位置是在sub 中串结束符处。该是源串中下一个位置。
//将 source 指向其前面一个字符。
//如果没找到子串,下面复制source所指的字节到结果串
*pc1++ = *
&&& source++;
//将source向后移一个字符
& *pc1=NULL;
int _tmain(int argc, _TCHAR* argv[])
char Source[] = "abbccdfdcdbbdccd";
& char Sub[] = "bb";
& char Rep[] = "*****";
& char *p = replace(Source, Sub, Rep);
& printf("Source:%s/n",Source);
& printf("Sub:%s/n",Sub);
& printf("Rep:%s/n",Rep);
& printf("Result:%s/n",p);
& return 0;
常见C语言面试题之四:删除字符串头尾空格,字符串右对齐
分类: C++
15:55 886人阅读 评论(0) 收藏 举报
#include "stdafx.h"
#include &stdio.h&
#include &string.h&
#include &malloc.h&
struct st {
& char name[10];
char *rtrim(char *);
char *ltrim(char *);
char *rjust(char *);
int _tmain(int argc, _TCHAR* argv[])
& //内存对齐&
& struct st stu={9,'c',"name",3.14};
& char name[11];
& printf("sizeof sturct=%d/n",sizeof(struct
st)); //==24
memcpy(&id,&stu,sizeof(int));
& printf("id=%d/n",id);
& memcpy(&ch,(char
*)&stu+sizeof(int),1);
& printf("ch=%c/n",ch);
& memcpy(name,(char
*)&stu+sizeof(int)+1,10);
& printf("name=%s/n",name);
& memcpy(&db,(char
*)&stu+16,sizeof(double));
& printf("db=%lf/n",db);
& //内存对齐
& //删除右边的空格
& //用字符指针,则rtrim函数中无法修改,产生错误!!!
*trail_str="&&&&
trail_str1[]="&&&&
& printf("Before rtrim():%s/n", trail_str1);
& printf("length:%d./n",
strlen(trail_str1));
& rtrim(trail_str1);
& printf("After rtrim():%s/n",
trail_str1);
& printf("length:%d./n", strlen(trail_str1));
& //删除左边的空格
trail_str2[]="&&&&
& ltrim(trail_str2);
& printf("After ltrim():%s/n", trail_str2);
& printf("length:%d/n", strlen(trail_str2));
& //右对齐
& char trail_str3[] =
& rjust(trail_str3);
& printf("After rjust():%s/n", trail_str3);
& printf("length:%d/n",
strlen(trail_str3));&
&&& return
char* rtrim(char* str)
& int n = strlen(str)-1;
& while(n&0)
if(*(str+n)==' ')
*(str+n)='/0';
//str[n]='/0';
char *ltrim(char* str)
& strrev(str);
& rtrim(str);&&
//调用上面的rtrim()函数
& strrev(str);
char *rjust(char* str)
& int n = strlen(str);
& char *dup_
& dup_str=strdup(str);
rtrim(dup_str);&&&
//调用上面的rtrim()函数
& int m = strlen(dup_str);
& sprintf(str, "%*.*s",n,m,dup_str);
& free(dup_str);
常见C语言面试题之五:两个字符串的最大公共子字符串
#include "stdafx.h"
#include "stdio.h"
#include "malloc.h"
#include "string.h"
char *maxsubstr(char *str1, char *str2)
& char *p1, *p2, *q1, *q2, *
& int max=0,
& p1 = str1;
& while(*p1!='/0')
while(*q1!='/0')
while((*p2!='/0')&&(*q2!='/0'))
if(*p2==*q2)
p2++;q2++;len++;
if(len&max)
destp =p1;
& substr=(char*)malloc(sizeof(char)*max);
& strncpy(substr,destp,max);
int _tmain(int argc, _TCHAR* argv[])
*s1="easderfghjkl";
& char *s2="jasdwfghjewserfghjk";
& printf("%s/n%s/n",s1,s2);
& sub = maxsubstr(s1,s2);
& printf("the max sub string is:%s",sub);
& return 0;
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 c语言经典面试题 的文章

 

随机推荐