题目1:写一个C程序对字符串进行压缩,例如 abbcccaaaa 经过压缩后变成 a1b2c3a4
用指针指向字符串数组首地址,对指针所指值进行计数,直到指针所指内容与上一次所指内容不同,打印出字符内容与字符个数。指针继续指向下一个数组元素,重复上述操作。
代码实现:
#include <stdio.h>
int main()
{
char str[16] = "abbcccaaaa";
char *p = str; //指向字符数组的临时指针
int n = 1; //计数值
while (*p != '\0') //一直执行到字符串末尾
{
if (*p == *(++p)) //前后字符相同,则计算值n加1
{
n++;
}
else
{
printf("%c%d", *(p-1), n); //打印出字符和它的个数
n = 1; //计数值变回初始值
}
}
printf("\n");
return 0;
}
题目2:缩减字符串,例如 “000001024”,缩减后就变成“1024”
用while循环过滤掉数组前多余的字符 ‘0’
#include <stdio.h>
char * Cut(char * src)
{
char * p = src; //将字符数组首地址赋给临时指针p
while (*(p++) == '0'); //过滤掉多余的字符‘0’
return p-1; //返回指针
}
int main()
{
char str[16] = "000001023";
char *p = Cut(str);
printf("%s\n", p);
return 0;
}
题目3:用C语言实现字符串循环右移,例如 “aabbccdd”,循环右移2位变成 “ddaabbcc”,要求移位参数n可调
用内存拷贝函数memcpy实现该功能
#include <stdio.h>
#include <string.h> //memcpy函数需要包含string.h头文件
#define MAX_SIZE 100
void LoopMove_R(char *str, int n)
{
int top = strlen(str) - n; //计算字符内容长度
char tmp[MAX_SIZE] = {0}; //临时数组
memcpy(tmp, str + top, n); //移位
memcpy(str + n, str, top);
memcpy(str, tmp, n);
}
int main()
{
char str[16] = "aabbccdd";
LoopMove_R(str, 2);
printf("%s\n", str);
return 0;
}
题目4:写出或模仿strcpy库函数的源码,要求不能使用string.h头文件里面的函数,strcpy函数原型:char * strcpy(char * str, const char * src)
char * Mystrcpy(char * str, const char * src)
{
char * p = str;
while (*(str++) = *(src++));
return p;
}
int main()
{
char str[16] = "hello world!";
char tmp[16] = {0};
Mystrcpy(tmp, str);
printf("%s\n", tmp);
return 0;
}