常见C语言面试题 软件工程面试题

<转载自CSDN,看着写的都很工整,因此也没有测试。明天挨个看看,如有问题会加以更正。主要是自己也想用,就转载了过来,望原作者见谅!!!>

常见C语言面试题之一:字符串代替、字符串转换整数

#include "stdafx.h"
using namespace std;
//--------字符替代问题
char* Translate(char* pSrc, const char cFindChar, const char*pReplaceStr, char* pTag)
{
char* p = NULL ;
int lLen = (int)strlen (pReplaceStr) ;

for (p = pSrc; *p!='/0'; p++)
{
if (cFindChar == *p)
{
strcpy(pTag, pReplaceStr) ;
pTag += lLen ;
}
else
{
*pTag++ = *p;
}
}
return pTag;
}

//--------字符串转换为整数
int myAtoi(const char* s){
int result =0;
int flag =1;
int i =0;
while(isspace(s[i]))
i++;
if(s[i] =='-'){
flag = -1;
i++;
}
if(s[i] =='+')
i++;
while(s[i]!= '/0'){
if((s[i] > '9') || (s[i] <'0'))
break;
int j = s[i] - '0';
result = 10 * result + j;
i++;
}
result =result * flag;
returnresult;
}

//--------整数转换为字符串
void itoa(int n,char s[])
{

//下面注释的是原作者的代码,觉得有问题,

//我修改后

int i,j,sign;

if((sign=n)<0)//记录符号
n=-n;//使n成为正数
i=0;
do{
int k=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[]= "HelloWord!";
char szTag[256]={0};
char szRep[]="(***)";
charresult[256] = {0};
Translate(szSrc,'o',szRep,szTag);
for(unsignedint i=0;i<strlen(szTag);i++) result[i] =szTag[i];
printf("%s/n",szTag);
printf("%s/n",result);
//-----------------------
int i =atoi(" -321");
printf("%d/n",i);
charch[256]={0};
itoa(-23456,ch);

return0;
}


常见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++] =i+'0';
i /=10;
}
for(k=0;k<j;k++)
str[k] =str1[j-1-k]; //

str[j++] = '.';
d -= (int)d;
for(i=0;i<10;i++)
{
d *=10;
str[j++] =(int)d+'0';
d -=(int)d;
}
while(str[--j]=='0');
str[++j] ='/0';
return str;
}


int _tmain(int argc, _TCHAR* argv[])
{
double d =365.897003120000;
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)
{
char *result;

//*pc1是复制到结果result的扫描指针
//*pc2是扫描source 的辅助指针
//*pc3寻找子串时,为检查变化中的source是否与子串相等,是指向sub的扫描指针
//找到匹配后,为了复制到结果串,是指向rep的扫描指针
char *pc1,*pc2,*pc3;

int isource, isub, irep;
isource = (int)strlen(source);
isub = (int)strlen(sub);
irep = (int)strlen(rep);

if(*sub==NULL)
returnstrdup(source);

//申请结果串需要的空间
int size = (int)((irep>isub)?(float)strlen(source)/isub*irep+1 :isource );
result = (char*)malloc(size*sizeof(char));
pc1=result;//为pc1依次复制结果串的每个字节作准备

while(*source !=NULL)
{
//为检查source与sub是否相等作准备,为pc2,pc3 赋初值
pc2=source;
pc3=sub;

//出循环的(任一)条件是:
//*pc2不等于*pc3(与子串不相等)
//*pc2到源串结尾
//*pc3到源串结尾(此时,检查了全部子串,source处与sub相等)
while(*pc2==*pc3 && *pc3!=NULL&& *pc2!=NULL)
{
pc2++;pc3++;
}

//如果找到了子串,进行以下处理工作
if(*pc3==NULL)
{
pc3=rep;
//将替代串追加到结果串
while(*pc3!=NULL)
{
*pc1++ = *pc3++;
}
pc2--;
source=pc2;

//检查source与sub相等的循环结束后
//* pc2 对应的位置是在sub 中串结束符处。该是源串中下一个位置。
//将 source 指向其前面一个字符。
}
else//如果没找到子串,下面复制source所指的字节到结果串
{
*pc1++ = *source;
}
source++;//将source向后移一个字符
}
*pc1=NULL;
return result;
}

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++ 2008-08-27 15:55 886人阅读 评论(0) 收藏 举报
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <malloc.h>

struct st {
int id;
char ch;
char name[10];
double db;
};

char *rtrim(char *);
char *ltrim(char *);
char *rjust(char *);

int _tmain(int argc, _TCHAR* argv[])
{
//内存对齐
int id;
struct st stu={9,'c',"name",3.14};
char ch;
char name[11];
double db;

printf("sizeof sturct=%d/n",sizeof(structst)); //==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函数中无法修改,产生错误!!!
//char*trail_str="AAAAA";
chartrail_str1[]="AAAAA";
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));

//删除左边的空格
chartrail_str2[]="AAAAA";
ltrim(trail_str2);
printf("After ltrim():%s/n", trail_str2);
printf("length:%d/n", strlen(trail_str2));

//右对齐
char trail_str3[] ="AAAAA";
常见C语言面试题 软件工程面试题
rjust(trail_str3);
printf("After rjust():%s/n", trail_str3);
printf("length:%d/n",strlen(trail_str3));

return0;
}

char* rtrim(char* str)
{
int n = strlen(str)-1;
while(n>0)
{
if(*(str+n)==' ')
{
*(str+n)='/0';
//str[n]='/0';
n--;
}
else
{
break;
}
}
return str;
}

char *ltrim(char* str)
{
strrev(str);
rtrim(str);//调用上面的rtrim()函数
strrev(str);
return str;
}

char *rjust(char* str)
{
int n = strlen(str);
char *dup_str;
dup_str=strdup(str);
rtrim(dup_str);//调用上面的rtrim()函数
int m = strlen(dup_str);
sprintf(str, "%*.*s",n,m,dup_str);
free(dup_str);
return 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, *destp;
char *substr;
int max=0, len;

p1 = str1;
while(*p1!='/0')
{
q1=str2;
while(*q1!='/0')
{
len=0;
p2=p1;
q2=q1;
while((*p2!='/0')&&(*q2!='/0'))
{
if(*p2==*q2)
{
p2++;q2++;len++;
}
else
break;
}
if(len>max)
{
max = len;
destp =p1;
}
q1++;
}
p1++;
}
substr=(char*)malloc(sizeof(char)*max);
strncpy(substr,destp,max);
return substr;
}

int _tmain(int argc, _TCHAR* argv[])
{
char*s1="easderfghjkl";
char *s2="jasdwfghjewserfghjk";
char *sub;
printf("%s/n%s/n",s1,s2);
sub = maxsubstr(s1,s2);
printf("the max sub string is:%s",sub);
return 0;
}

  

爱华网本文地址 » http://www.413yy.cn/a/25101011/48389.html

更多阅读

转载 C语言:随机函数rand()、srand()、random()和rando

原文地址:C语言:随机函数rand()、srand()、random()和randomized()的区别和用法作者:猎空声明一点:在VC++中,没有random()和randomize()函数,只有rand()和srand()函数。其中,random()和randomize()函数的使用的方法分别与rand()和srand()

如何学习C语言编程

如何学习C语言编程——简介6 部分:准备工作 变量的使用 使用条件语句 学习循环语句 使用函数 不断学习诞生于上世纪70年代的C语言是一门古老的语言了, 但作为一门底层语言,时至今日它仍然非常强大。学习C语言能够为学习其他更复杂

转载 C语言贪心算法 c语言贪心算法

你真牛原文地址:C语言贪心算法作者:人鱼的泪贪心算法开放分类:算法、信息学贪心算法所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最

声明:《常见C语言面试题 软件工程面试题》为网友魔窟鬼龙分享!如侵犯到您的合法权益请联系我们删除