压缩字符串与运用指针数组循环后移(典例)

本文介绍了如何使用C语言实现字符串的压缩,通过计数重复字符并以数字表示,同时还包括了数组元素的循环后移算法及水仙花数的判断程序。

压缩字符串

#include<stdio.h>
#define M 80
void zip(char *p);
int main()
{
	char line[M];
    gets(line);			//以回车结束,可以有空格。
    zip(line);
    puts(line);			//输出完字符串自动换行。
    return 0; 
}
void zip(char *p)
{
	char *q=p;				//定义一个新的指针来对调用的指针变量进行变化
	int n;
	while(*p!='\0')
	{
		n=1;						//对n进行重置
		while(*p==*(p+n))
		{
			n++;					//每一次遇见相同的字母只会有一个n
   	 }
   	 if(n>=10)
   	 {
   	 	*q++=(n/10)+'0';
   	 	*q++=(n%10)+'0';			//n大于10占两个字符位 
   	 }
   	 else if(n>=2)
   	 {
   	 	*q++=n+'0';					//让第一个重复字母为重复次数
   	 }
   	 *q++=*(p+n-1);			//重新复制字符
   	 p=p+n;				//跳过相同字符
    }
    *q='\0';						//出现新的结束标志
}

数组循环后移

#include<stdio.h>
#define M 100
void mov(int *x,int n,int m);
int main()
{
   int *p,a[M],m,n,i;
   scanf("%d %d",&m,&n);
   for(p=a,i=0;i<n;i++)
   {
   	scanf("%d",&*p++);	
   }
   mov(a,n,m);
   printf("After moved:");
   for(i=0;i<n;i++)
   {
   	printf("%5d",a[i]);
   	}
   	return 0;
   	}
   	void mov(int *x,int n,int m)
   	{
   		int i,j,temp;
   			m=m%n;				//简化循环次数
   			for(i=0;i<m;i++)			//循环几次
   			{
   				int c=x[n-1];			//中间变量保留啊x[n-1]
   				for(j=n-1;j>0;j--)
   				{
   					x[j]=x[j-1];			//从后往前移动一次
   					}
   						x[0]=c;
   						}
   	}

水仙花数之小结

int main()
   {
   	int n,sum=0,c=0,i,m,d,j,flag=3;
   	scanf("%d %d",&i,&m);
   	for( ;i<m;i++)
   	{
   		d=c=i;
   		sum=0;
   		for( j=0;c!=0;j++){
   			c/=10;
   		}
   		for(int k=0;k<=j;k++)
   		{
   			n=d%10;
   			sum=sum+pow(n,j);
   			d/=10;
   		}
   		if(flag!=j){
   			printf("\n");					//关键的换行步骤
   			flag=j;
   		}
   		if(i==sum&&j==3)
   		{
   		printf("水仙花数%-6d ",sum);
   		
   	    }
   	    if(i==sum&&j==4)
   		{
   			printf("玫瑰花数%-6d ",sum);
   		 } 
       }
   	return 0;
   }					
分数 1 作者 张泳 单位 浙大城市学院 数组的基地址是在内存中存储数组的起始位置,数组名本身就是一个地址即指针值。 T F 分数 1 作者 张泳 单位 浙大城市学院 对于定义int a[10],*p=a; 语句p=a+1;和a=a+1;都是合法的。 T F 分数 1 作者 张泳 单位 浙大城市学院 两个任意类型的指针可以使用关系运算符比较大小。 T F 分数 1 作者 张泳 单位 浙大城市学院 冒泡排序效率较高,因为它只需要约 1.jpg 次比较。 T F 分数 1 作者 陶煜波 单位 浙江大学 执行以下代码后,变量x的值为042,变量y的值为87,变量z的值为0x4e。 int a[10] = { '\012', 34, '\x56', 78, 0x910 }, *p = a + 1; int x = *p++; int y = ++*p; int z = *++p; T F 分数 1 作者 陶煜波 单位 浙江大学 变量定义如下,指针变量q的值比指针变量p的值大sizeof(char)。 int a[5]; int *p = a; char *q = (char *)p + 1; T F 分数 1 作者 陶煜波 单位 浙江大学 定义数组int a[10];,则表达式(int)(&a + 1) - (int)&a的值为4。 T F 分数 1 作者 陶煜波 单位 浙江大学 函数申明和使用代码如下,当调用该函数时,实参数组b的10个元素的值单向传递给形参数组a的10个元素。 int fun(int a[10]); int b[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; fun(b); T F 分数 1 作者 陶煜波 单位 浙江大学 形参为数组的函数在编译后都转化为形参为指针的函数,如int fun(int a[10])转化为int fun(int *a)。 T F 分数 1 作者 陶煜波 单位 浙江大学 字符串压缩代码如下,char *q = p;是将指针变量p的值(字符串首字符的地址)赋值给指针变量*q。 void zip(char *p) { char *q = p; ...... } T F 分数 1 作者 张泳 单位 浙大城市学院 字符串常量在内存中的存放位置由系统自动安排。 T F 分数 1 作者 张泳 单位 浙大城市学院 字符串常量实质上是一个指向该字符串首字符的指针常量。 T F 分数 1 作者 张泳 单位 浙大城市学院 调用printf函数,%s的格式输出字符串时,字符数组名、字符指针字符串常量都可以作为输出参数。 T F 分数 1 作者 陶煜波 单位 浙江大学 char s[128];使用scanf("%127s", s);输入时,将读取127个字符,并加上\0后返回,这样可以避免字符数组越界存储。 T F 分数 1 作者 陶煜波 单位 浙江大学 输出字符串puts(s);等价于printf("%s\n", s);。 T F 分数 1 作者 陶煜波 单位 浙江大学 int sprintf(char *string, char *format [,argument,...])字符串格式化函数,即将格式化的数据写入某个字符串中,如 char str[128]; int pos = sprintf(str, "%d-%.2f-%s", 123, 3.14159, "abc"); str字符串的内容为"123-3.14-abc",pos的值为输出的字符数12。 T F 分数 1 作者 陶煜波 单位 浙江大学 代码char p[] = "Hello"; strcpy(p, "World");将导致段错误。 T F 分数 1 作者 陶煜波 单位 浙江大学 代码char *p = "Hello"; strcpy(p, "World");将导致段错误。 T F 分数 1 作者 张泳 单位 浙大城市学院 调用strcmp函数比较字符串大小时,通常较长的字符串会较大。 T F 分数 1 作者 陶煜波 单位 浙江大学 mystrlen函数实现了字符串有效长度计算。 int mystrlen(char *s) { char *p = s; while (*++p) ; return p - s; } T F
最新发布
11-28
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值