CTGU—第7章指针

文章介绍了使用C语言中的指针进行整数和字符交换、字符串排序、回文判断、数字字符串转整数、字符串长度计算、连接和删除前导空格等基础操作的函数实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第1关:两个整数交换

任务:采用指针变量作为形参,编写一个实现两个整数交换的函数。在主函数中输入三个整数,调用数据交换函数将他们按从大到小的顺序排序后输出。

#include <stdio.h>
void main()
{
	int a,b,c;     
	void swap(int *px,int *py);	
	scanf("%d%d%d",&a,&b,&c);
	if(a<b)
		swap(&a,&b);
	if(a<c)
		swap(&a,&c);
	if(b<c)
		swap(&b,&c);
	printf("%d %d %d\n",a,b,c);
}
void swap(int *px,int *py)  //定义实现数据交换的函数
{
//************Begin***********
int temp;
temp=*px;
*px=*py;
*py=temp;
//************End***********
}

第2关:两字符交换

任务:采用指针变量作为形参,编写一个实现两字符交换的函数。在主函数中输入一个字符串,调用字符交换函数将其中的字符按从小到大的顺序排序后输出。

#include <stdio.h>
void main()
{
	char str[80], i, j;
	void swap(char *pa,char *pb);
	gets(str);
//************Begin***********
int len=0;
while(str[len]!='\0')//求字符串的长度
{
    len++;
}

for(i=1;i<=len-1;i++)
{
    for(j=0;j<len-i;j++)
    {
        if(str[j]>str[j+1])
        {
            swap(&str[j],&str[j+1]);
        }
    }
}
//************End***********
	printf("%s\n", str); //输出排序后的字符串
}

void swap(char *pa,char *pb) //自定义函数实现两字符交换
{
    
//************Begin***********
int temp;
temp=*pa;
*pa=*pb;
*pb=temp;
//************End***********
}

第3关:判断一个字符串是否是回文

任务:编写函数,判断一个字符串是否是回文。在主函数中输入一个字符串,调用自定义函数,输出结果。所谓回文是指顺读和倒读都一样的字符串。如“XZYKYZX”是回文。

#include <stdio.h>
#include <string.h>
void main()
{
    char s[50];
    int hw(char *s); // 自定义回文判断函数的声明
    gets(s);
    if (hw(s)) // 调用回文判断函数,是回文时,函数的返回值为1
        printf("是回文!\n");
    else
        printf("不是回文!\n");
}
// 定义函数判断回文,是则返回1,否则返0
int hw(char *s)
{
    //************Begin***********
    int i = 0, j = strlen(s) - 1;
    while (i < j) // 只要i小于j,继续比较两端的字符
    {
        if (s[i] != s[j]) // 如果发现不相等,直接返回0
            return 0;
        i++;
        j--;
    }
    return 1; // 如果循环结束了,说明没有发现不相等的情况
    //************End***********
}

第4关:数字字符串转换成与之相同的整数

任务:编写函数fun(),将一个数字字符串转换成与之相同的整数。例如:如果输入的字符串为“12345”,则函数返回整数12345。要求函数的形参采用指针变量。

#include <stdio.h>
#include <string.h>
void main()
{
    char s[10];
    int n;
    int fun(char *s);
    gets(s);
    n = fun(s);
    printf("%d\n", n);
}
int fun(char *s)
{
    //************Begin***********
    int n = 0;
    int i;
    int len = strlen(s);
    for (i = 0; i < len; i++)
    {
        n = n * 10 + s[i] - '0';
    }
    return n;
    //************End***********
}

第5关:求字符串的长度

任务:编写一个类似库函数strlen()的函数,求字符串的长度,在main()函数中输入一个字符串,调用该函数后输出结果。要求函数的形参采用指针变量。

#include <stdio.h>
void main()
{ 
	char str[30];
	int strlen1(char *);
	gets(str);
	printf("%d\n",strlen1(str));
}

int strlen1(char *p)
{
//************Begin***********
int len=0;
while(p[len]!=0)
{
    len++;
}
return len;
//************End***********
}

第6关:字符串连接

任务:编写一个类似库函数strcat()的函数,实现两个字符串的连接,并在main()函数中验证该自定义函数的功能。

#include <stdio.h>
void main()
{
	char str1[100];
	char str2[100];
	gets(str1);
	gets(str2);
	char * scat(char *s1,char *s2);
	printf("%s\n",scat(str1,str2));
}
char * scat(char *s1,char *s2) //将s2字符串连接到s1串之后
{
	//********Begin*************
    int len1=0;
    int len2=0;
    int i;

    while(s1[len1]!=0)
    {
        len1++;
    }

    while(s2[len2]!=0)
    {
        len2++;
    }

    for(i=0;i<len2;i++)
    {
        s1[len1+i]=s2[i];
    }
    return s1;
   //********End***************
}

第7关:删除字符串中的前导空格

任务:编写函数ltrim,用来删除字符串中的前导空格,中间和尾部的空格不删除。例如:字符串为:" A BC DEF ",删除后的结果是"A BC DEF "。要求函数形参采用指针变量。

#include <stdio.h>
void main()
{  
	void ltrim(char *a);
	char s[100];
	gets(s);   
	ltrim(s);
	puts(s);
}

void ltrim(char *a)
{
	//****************Begin**************
    //找到最前面有几个空格
    int n=0;
    int j=0;
    while(a[n]==' ')
    {
        n++;
    }

    if(n>0)
    {
        while(a[n]!='\0')
        {
            a[j]=a[n];
            n++;
            j++;
        }
    }
    a[j]='\0';
    
   //****************End**************** 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值