今天使用对函数和指针进行一些程序的练习和理解
一、将一串符号“aabbfssdffg”压缩成“a2b2fs2df2g”
#include <stdio.h>
void f(char *a)
{
if(a == NULL)
return;
char *p1=a;
int count=1;
while(*a++)
{
if(*a == *(a-1)) //判断前后字母
{
*p1=*a;
count++; //记下前后相同字母的个数
}
else if(count > 1) //相同字母大于1时将个数打印出来
{
++p1;
*p1=count+'0';
count=1;
++p1;
}
else if(1 == count) //单个字母的指针指向下一个地址
{
*p1 = *(a-1);
p1++;
}
}
*p1 = '\0';
}
int main()
{
char a[]="aabbfssdffg";
f(a);
printf("%s\n",a);
return 0;
}
编写思路:调用函数,用一个指针指向数组a的地址,同时用p1记录地址。移动指针知道遇到‘\0’结束,判断前后字符是否相同,用count记录相同的个数,遇到相同的就将值赋给前面相同的字符,不想同的就将p1移动一格将count的数转换成字符的形式赋值给p1,再次移动p1。
二、一个很有意思的猜数小游戏
#include <stdio.h>
int game(int n)
{
int i,b;
srand(time(NULL));
for(i=0;i<2;i++)
{
b= rand()%100;
}
return b;
}
int main()
{
int a;
int s=game(a);
while(1)
{
printf("Please Enter a Number:\n");
scanf("%d",&a);
if(a > s)
{
printf("The Number is TOO Lager:\n");
}
if(a < s)
{
printf("The Number is TOO Small!\n");
}
if(a == s)
{
printf("You Are Right!\nThe Number is %d\n",s);
break;
}
}
return 0;
}
编写思路:运用rand函数产生一个1-100的数,返回产生的数,采用一个死循环来判断键盘输入的数是否与返回的值相同,打印出对应的提示,直到数值相同时打印答对的提示并用break退出死循环。
三、将一段字符串中的数字取出打印出来,大写字母去掉只留下小写字母,并用大写打印出来
#include <stdio.h>
void Split(char *pa,char *pb,char *pc)
{
char *p1=pa,*p2=pb,*p3=pc;
while(*pa)
{
if(*pa >= '0' && *pa <= '9')
{
*p2 = *pa;
p2++;
}
if(*pa >= 'a' && *pa <= 'z')
{
*p3 = *pa+('A'-'a');
p3++;
}
pa++;
}
*p3='\0';
*p2='\0';
}
int main()
{
char a[]="1a2b3GAHGd4ssad54a";
char i[30]={};
char ch[30]={};
Split(a,i,ch);
printf("原来的数%s\n",a);
printf("数字有%s\n",i);
printf("数字有%s\n",ch);
return 0;
}