C字符串笔试题
“qiushui”通过精心收集,向本站投稿了8篇C字符串笔试题,下面是小编为大家准备的C字符串笔试题,欢迎阅读借鉴。
篇1:C字符串笔试题
一、void * memcpy( void* dest, const void* src, size_t count )
表头文件: #include
定义函数: void *memcpy(void *dest, const void *src, size_t n)
函数说明:
memcpy用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。与strcpy不同的是,memcpy会完整的复制n个字节,不会因为遇到字符串结束'\0'而结束。
返回值: 返回指向dest的指针
附加说明: 指针src和dest所指的内存区域不可重叠
void * memcpy( void* dest, const void* src, size_t count )
{
assert((strDest!=NULL) && (strSrc !=NULL));
char* d = (char*)dest;
const char* s = (const char*)src;
while( count-->0 )
*d++ = *s++
return dest ;
}
注解:
1、size_t 就是unsigned int
2、
函数名: assert(断言)
功 能: 测试一个条件并可能使程序终止
用 法: void assert(int expression);
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:
#include
void assert( int expression );
assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。
二、char *strcpy(char *strDest, const char *strSrc)
字符串复制函数
char *strcpy(char *strDest, const char *strSrc);
{
assert((strDest!=NULL) && (strSrc !=NULL)); // 2分
char *address = strDest; // 2分
while( (*strDest++ = * strSrc++) != ‘\0’ ); // 2分
return address ; // 2分
}
const char *strSrc中的const是指字符串内容为const,而不是说strSrc是const的,如果要指定strSrc是const,应该写成 char * const strSrc 。
篇2:C字符串笔试题
一、int Strcmp(char *str1, char *str2)
字符串比较函数
int Strcmp(char *str1, char *str2)
{
int i=0;
int b=0;
while(str1[i]||str2[i])
{
if(str1[i]>str2[i])
{
b=1;break;
}
else if(str1[i]
{
b=-1;break;
}
i++;
}
return b;
}
当只要求判断是否相等时,可简化为:
int strcmp(char *source, char *dest)
{
while ( (*source != '\0') && (*source == *dest))
{
source++;
dest++;
}
return ( (*source) - (*dest) ) ? -1 : 0;
}
二、int strlen(const char* str)
计算字符串长度
int strlen(const char* str)
{
assert(str != NULL);
int len = 0;
while (*str++!='\0')
len++;
return len;
}
篇3:C语言字符串笔试题
对一个字符串重新排列,字母排在前面,数字排在后面,并不改变原来字母之间以及数字之间的字符顺序。
[cpp] view plain copy print?
#include
#include
#include
#define N 30
/
*函数名称: fun
*创建时间: 20xx.12.5
*描 述: 对一个字符串重新排列,字母排在前面,数字排在后面,并不改变原来字母之间以及数字之间的字符顺序。
*参 数: char * s,int *m
*返 回 值: chLetter(数组chLetter的首元素地址)
*局部变量: char chLetter[N];
* char chNumber[N];
* int i,j,k;
/
char * fun(char * s,int *m) //参数m是通过调试才想到的
{
char chLetter[N]; //用来存放字母
char chNumber[N]; //用来存放数字
int i,j,k;
i=0; //初始化
j=0; //j用来记录字母的个数
k=0; //k用来记录数字的个数
for (i=0; i
{
if (s[i] >= 'A' && s[i] <= 'Z' //将字母存入chLetter
|| s[i] >= 'a' && s[i] <= 'z')
{
chLetter[j]=s[i];
j++;
}
if (s[i] >= '0' && s[i] <='9') //将数字存入chNumber
{
chNumber[k]=s[i];
k++;
}
}
chLetter[j]='';
chNumber[k]='';
*m=j+k; //用来返回最后输入和输出时字符的个数
strcat(chLetter,chNumber);
return chLetter;
}
//主函数
void main
{
char s[N];
int i;
int m;
char *p;
p=NULL;
printf(“请输入字符串(30字符以内):n”);
scanf(“%s”,s);
p=fun(s,&m); //刚开始没定义出这个m来现限制指针p所指数组的长度就出现了后面两个字符乱码
for (i=0; i
{
s[i]=p[i];
}
printf(“结果为:”);
for (i=0; i
{
printf(“%c”,s[i]);
}
printf(“n”);
}
篇4:C语言字符串笔试题
将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换为t2所指字符串。
[cpp] view plain copy print?
#include
#include
#include
#define N 30 //s所指字符串的最大长度
#define T 2 //t1和t2所指字符串的长度
/
*函数名称: fun
*创建时间: 20xx.12.5
*描 述: 将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换为t2所指字符串
*参 数: char * s,char * t1, char * t2,int *m
*返 回 值: w(数组w的首元素地址)
*局部变量: char w[N];
* char temp[T];
* char t1temp[T];
* int i,j,k,l;
/
char * fun(char * s,char * t1, char * t2,int *m) //m的作用和第一题一样,没m最后两个字符会乱码(想寻求其他方法)
{
char w[N]; //用来存放处理后的字符串
char temp[T]; //用来存放从s所指字符串中截取的子串
char t1temp[T]; //用来存放t1所指字符串
int i,j,k,l;
//向t1temp中存入t1所指字符串
for (i=0; i
{
t1temp[i]=t1[i];
}
t1temp[T]='';
//求m所指的值
for (i=0;i
{
if (s[i]=='')
{
*m=i;
}
}
//寻找相同时的最后一个字符的下标
for (i=0; i
{
l=0;
for (j=i; j<(i+T); j++,l++) //截取长度为T的子串存到temp中
{
temp[l]=s[j];
}
temp[T]='';
if (strcmp(t1temp,temp) == 0)
{
k=i; //k记录相同时的最后一个字符的下标
}
}
for (i=0; i
{
j=0;
if (i>=k && i<(k+T)) //在找到的k点处开始换值
{
w[i]=t2[j]; //换值
j++;
}
else
{
w[i]=s[i];
}
}
return w;
}
//主函数
void main
{
char s[N];
char t1[T];
char t2[T];
int i;
int m;
char *p;
p=NULL;
printf(“请输入字符串(20字符以内):”);
scanf(“%s”,s);
printf(“请输入将要被替换的子字符串(仅限两个字符):”);
scanf(“%s”,t1);
printf(“请输入将要用来替换的字字符串(仅限两个字符):”);
scanf(“%s”,t2);
p=fun(s,t1,t2,&m);
for (i=0; i
{
s[i]=p[i];
}
printf(“结果为:”);
for (i=0; i
{
printf(“%c”,s[i]);
}
printf(“n”);
}
篇5:C语言字符串笔试题
将s所指的字符串中ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。
[cpp] view plain copy print?
#include
#include
#include
#define N 30
/
*函数名称: fun
*创建时间: 20xx.12.6
*描 述: 将s所指的字符串中ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。
*参 数: char * s,int * m
*返 回 值: return t,(t为指向数组的指针)
*局部变量: char * t;
* char temp[N];
* int i,j=0;
/
char * fun(char * s,int * m)
{
char * t;
char temp[N]; //临时的数组,用来存放t所指的数组
int i,j=0;
t=temp;
for (i=0; i
{
if (s[i]%2==0 )
{
temp[j]=s[i]; //如果是偶数,赋值给t所指的数组
j++;
if (s[i]=='') //找到m的值先要找出输入了多少个字符
{
break;
}
}
}
*m=j; //找到m的值即输出结果的长度
t[j]='';
return t;
}
//主函数
void main
{
char s[N];
int i;
int m;
char *p;
p=NULL;
printf(“请输入字符串(30字符以内):n”);
scanf(“%s”,s);
p=fun(s,&m); //刚开始没定义出这个m来现限制指针p所指数组的长度就出现了后面两个字符乱码
for (i=0; i
{
s[i]=p[i];
}
printf(“结果为:”);
for (i=0; i
{
printf(“%c”,s[i]);
}
printf(“n”);
}
篇6:c经典笔试题
有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中.
#include
#include
int main(int argc,char* argv)
{
FILE* fp;
int i,j,k,num,NUM;
char c[50],t,ch;
if((fp=fopen(“A”,“r”))==NULL)
/*can be replaced by open
* int fd=open(“A”,O_RDONLY|O_CREAT);*/
{
printf(“fileA cannot be opened\n”);
exit(0);
}
printf(“\nA contents are:\n”);
for(i=0;(ch=fgetc(fp))!=EOF;i++)/*一个字符一个字符读*/
{
c[i]=ch;
putchar(c[i]);
}
num=i+1;
fclose(fp);
if((fp=fopen(“B”,“r”))==NULL)
{
printf(“fileB cannot be opened\n”);
exit(0);
}
printf(“\nB contents are :\n”);
for(i=0;(ch=fgetc(fp))!=EOF;i++)
{
c[num+i]=ch;
putchar(c[num+i]);
}
fclose(fp);
NUM=num+i+1;
for(k=0;k
{
for(j=0;j
{
if(c[j]>c[j+1])
{
t=c[j];
c[j]=c[j+1];
c[j+1]=t;
}
}
}
printf(“\nC fileis:\n”);
fp=fopen(“C”,“w”);
for(i=0;i
{
putc(c[i],fp);/*将字符一个个写入文件中*/
putchar(c[i]);/*一个个输出字符*/
}
fclose(fp);
return 1;
}
篇7:c经典笔试题
有一浮点型数组A,用C语言写一函数实现对浮点数组A进行降序排序,并输出结果,要求要以数组A作为函数的入口.(建议用冒泡排序法)
#include
#include
void BubbleSort(int arr, int n)
{
int i,j;
int exchange = 1;//交换标志,提高算法效率;
int temp;
for(i=0;i
{
exchange=0;//本趟排序开始前,交换标志应为假
for(j=0;j
{
if(arr[j+1] >arr[j])
{
temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
exchange=1; //发生了交换,故将交换标志置为真
}
}
if(!exchange) //本趟排序未发生交换,提前终止算法
return;
}
}
int main(int argc,char* argv)
{
int arr[5]={1,4,2,6,5};
int i;
BubbleSort(arr, 5);
printf(“after sort,arr is :\n”);
for(i=0;i<5;i++)
{
printf(“%3d”,arr[i]);
}
return 1;
}
篇8:c经典笔试题
写出二分查找的代码:
Int binary_search(int* arr,int key,int size)
{
Intmid;
Intlow=0;
Int high=size-1;
While(low<=high)
{
Mid=(low+high)/2;
If(arr[mid]>key)
High=mid-1;
ElseIf(arr[mid]
Low=mid+1;
Else
Return mid;
}
Return -1;
}
请编写一个C 函数,该函数在一个字符串中找到可能的最长的子字符串,该字符串是由同一字符组成的。
#include
#include
#include
int ChildString(char*p)
{
char* q=p;
int stringlen=0, i=0,j=1,len=0,maxlen=1;
//stringlen=strlen(p);
while(*q!='\0') //不能用strlen,求得长stringlen
{
stringlen++;
q++;
}
while( i< stringlen)
{
if(*(p+i)==*(p+j)&&j< stringlen)
{
len++; //统计子串长度
i++;
j++;
}
else
{
if(len>=maxlen) //统计最大子串长度
{
maxlen=len+1;
len=0;
}
else
len=0;
i++;
j++;
}
}
return maxlen;
}
int main(int argc,char* argv)
{
char arr[11];
int len;
printf(“please input chararr(10):\n”);
scanf(“%s”,arr);
len=ChildString(arr);
printf(“the len of childarr is:%d\n”,len);
return 1;
}
【C字符串笔试题】相关文章:
1.C/C++笔试题
2.C语言笔试题
3.C语言指针笔试题
4.笔试题
7.CPMP笔试题
8.笔试题继承
9.笔试题编译程序
10.HTC笔试题






文档为doc格式