欢迎来到个人简历网!永久域名:gerenjianli.cn (个人简历全拼+cn)
当前位置:首页 > 教学文档 > 试题>C字符串笔试题

C字符串笔试题

2023-12-01 08:22:29 收藏本文 下载本文

“qiushui”通过精心收集,向本站投稿了8篇C字符串笔试题,下面是小编为大家准备的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.笔试题

5.TCL集团校园招聘C/C++方向笔试题

6.笔试题University

7.CPMP笔试题

8.笔试题继承

9.笔试题编译程序

10.HTC笔试题

下载word文档
《C字符串笔试题.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度: 评级1星 评级2星 评级3星 评级4星 评级5星
点击下载文档

文档为doc格式

  • 返回顶部