【无标题】

C语言刷题

用指针实现删除字符串中出现的指定字符。(字符串和指定字符均由键盘输入)

#include <stdio.h>
void delChar(char* str, char c)
{
    int i = 1;
    char* p1 = str;  //p1用于覆盖值的操作。
    char* p = str;   //p用于移位判断。
    while (*p != 0) //当*p为/0时结束函数。
    {
        if (*p == c) //判断是否为那个要被删去的值。
        {
            for (p1 = p, i = 1; *p1 != 0; p1++) //令操作指针从当前的那个要被删去的值开始,判断它的下一位是不是也要被删去,然后位移到不用被删去的位置,
                //将此位置上的值覆盖给当前位置。每出现一个需要被删去的值,操作指针都需要从后面找一个值来补到前面。
            {
                for (; 1; i++)//为了避免出现字符连续出现  例如aaaaaabbcc删去a失败的情况,引入一个i进行判断,当操作指针位移到上面的值不是a的时候将这个
                    //值赋给当前位置。这样的话,第二个a就需要i+2位上的值来覆盖。
                {
                    if (*(p1 + i) != c)
                    {
                        *p1 = *(p1 + i);//完成覆盖删去值后,跳出循环。
                        break;
                    }
                }
            }
        }
        p++; //当待删除值被覆盖后,用于移位判断的p继续向后移动。
    }
}
int main()
{
    char str[100] = { 0 };
    gets(str);
    char c;
    scanf("%c", &c);
    delChar(str, c);
    puts(str);
    return 0;
}

利用指针编写程序实现3*3矩阵的转置

#include<stdio.h>
int main()
{
	void transpose(int (*p)[3],int (*q)[3]);
	int a[][3]={1,2,3,
				4,5,6,
				7,8,9};
	int b[][3]={1,2,3,
				4,5,6,
				7,8,9};

	int (*p)[3]=a;
	int (*q)[3]=b;
	transpose(p,q); 
	for(int i=0;i<3;i++)
	{
		for(int j=0;j<3;j++)
			{
				printf("%d ",b[i][j]);
			}
			printf("\n");
	}
}
void transpose(int (*p)[3],int (*q)[3])
{
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
			{
				q[j][i]=p[i][j];
			}
}

输入一个字符串,当字符串长度为奇数时最中间的字符不动,左右半边平移互换位置。例如输入abcdefg则输出efgdabc;当字符串长度为偶数时,左右半边直接平移互换位置,例如:输入abcdefgh则输出efghabcd。请编写swap(char *a,int n)函数实现该功能。

#include<stdio.h>
#include<string.h>
int main()
{
	int n;
	void swap(char* a, int n);
	char c[100] = { '0' };
	gets(c);
	char* a = c;
	n = strlen(c);
	swap(a, n);
	puts(c);
	return 0;
}
void swap(char* a, int n)
{
	char temp;
	if (n % 2 == 0)
	{
		for (int i = n / 2; i < n; i++)
		{
			temp = a[i];
			a[i] = a[i - n / 2];
			a[i - n / 2] = temp;
		}
	}
	else
	{
		for (int i = (n + 1) / 2; i < n; i++)
		{
			temp = a[i];
			a[i] = a[i - (n + 1) / 2];
			a[i - (n + 1) / 2] = temp;
		}
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值