近期做了一套某IT公司的C/C++软件工程师的笔试题。结果很不理想,很多地方出现了低级错误。下面对试卷做一个简单的总结。
试卷分为选择题、填空题、改错题以及编程题。和大部分的试题类型相似。其中指针,函数,和结构体占了很大的比例,结构体部分参考前面总结的博客(【结构体】点击打开链接)。
下面附上试题的相关代码:
1、模拟实现strncpy函数:
//模拟实现strncpy函数
#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strncpy(char *dest, const char *src, int n)
{
char *p = dest;
assert(dest != NULL);
assert(src != NULL);
while (n && (*dest++ = *src++))
{
n--;
}
if (n > 0)
{
while (--n)
{
*dest++ = '\0';
}
}
return p;
}
int main()
{
char arr[50] = { 0 };
int len = strlen("hello bit");
printf("arr = %s\n", my_strncpy(arr,"hello bit", len));
system("pause");
return 0;
}
//模拟实现strncat函数
#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strncat(char *dest, const char *src, int n)
{
char *p = dest;
assert(dest != NULL);
assert(src != NULL);
while (*dest != '\0')
{
*dest++;
}
while (n&& *src)
{
*dest++ = *src++;
n--;
}
*dest = '\0';
return p;
}
int main()
{
char arr[20] = "hello ";
int len = strlen(arr);
char *ret = my_strncat(arr, arr, len);
printf("%s", ret);
system("pause");
return 0;
}
模拟实现strncmp函数
#include<stdio.h>
#include<string.h>
#include<assert.h>
int my_strncmp(const char *arr1, const char *arr2, int n)
{
assert(arr1 && arr2);
while (n && (*arr1 == *arr2))
{
if (arr1 == '\0')
return 0;
arr1++;
arr2++;
n--;
}
return *arr1 - *arr2;
}
int main()
{
char *arr1 = "abcdef";
char *arr2 = "abcde";
int len = strlen(arr1);
int ret = my_strncmp(arr1, arr2, len);
printf("%d\n", ret);
system("pause");
}
//模拟实现strrchr函数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
char*my_strrchr(char*str, char ch, int len)
{
str = str + len - 1;
assert(str);
while (*str != '\0')
{
if (*str == ch)
return str;
str--;
}
return 0;
}
int main()
{
int ch = 0;
char arr[] = "abc dab cdfgh";
int len = strlen(arr);
printf("请输入要查的字符");
scanf_s("%c", &ch);
printf("%s\n", my_strrchr(arr, ch, len));
system("pause");
return 0;
}
//模拟实现strchr函数
#include<stdio.h>??
#include<stdlib.h>??
#include<assert.h>??
char* my_strchr(char*str, char ch)
{
assert(str);
while (*str != '\0')
{
if (*str == ch)
return str;
str++;
}
return 0;
}
int main()
{
char ch = 0;
char arr[] = "abcdabcdefgh";
printf("请输入要查的字符");
scanf_s("%c", &ch);
printf("%s\n", my_strchr(arr, ch));
system("pause");
return 0;
}
以上是C语言中常见的几种函数,别外还有strcpy,strcmp......就不一一举例。详见:(【模拟实现函数】点击打开链接)。
最后附上一道经典的编程入门题:字符串右移位函数。
#include <stdio.h>
#include <string.h>
void RightLoopMove(char* pstr, unsigned short steps)
{
//assert(pstr != NULL);
int len = strlen(pstr);
while (steps--)
{
char temp = pstr[len - 1];
//先取出最后一位
int i = 0;
for (i = len - 2; i >= 0; i--)
{
pstr[i + 1] = pstr[i];
//依次往后移
}
pstr[0] = temp;
//把最后一位给第一位
}
}
int main()
{
char a[] = "abcdefghi";
RightLoopMove(a, 2);
printf("%s\n", a);
system("pause");
return 0;
}
以上是试卷总结的一部分,其它内容将在后期推出,本人是新手,在总结的过程中也在不断地的学习。文中出现的错误希望大家批评指正,另外我们在平时还是要多看书,《剑指offer》和《C和指针》都是经典之作!谢谢大家!