常见的字符串,指针笔试题

题目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;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值