c语言第七次练习题

1、改错:

(a)、void test1()
    {
        char string[10];
        char *str1 = "0123456789";
        strcpy(string, str1);
    }

//strcpy会把/0也copy进来,此时数组已经越界,但是编译器不会检查数组越界问题,所以打印string时输出字符0123456789

(b)、void test2()
    {
        char string[10], str1[10];
        for (i=0; i<10; i++)
        {
            str1[i] = 'A';
        }
        strcpy(string, str1);
    }

//strcpy是以/0作为结束标志的,但是这个str1数组中没有/0

    (c)、void test3(char *str)
    {
        char string[10];
        if (strlen(str1)<=10)
        {
            strcpy(string, str1);
        }
    }   

//string[10]在test3这个函数结束时会被释放。所以相当于没有赋值。

#include<stdio.h>
void test3(char *str)
    {   //函数内定义的新的字符数组 
        char string[10];
        if (strlen(str)<=10)
        {   //如果str字符串小于10的话,就把str的字符复制给字符数组string[10] 
            strcpy(string, str);
        }
    }   
//string[10]在test3这个函数结束时会被释放。所以相当于没有赋值。

2、找赛手:2个羽毛球队比赛,各出3人,每个人只比一次。甲队为A,B,C三人,乙队为X,Y,Z三人。有人打听比赛名单,A说他不和X比,C说不和X,Z比。编程找出三队赛手的名单.

#include<stdio.h>
int main(void)
{   
    int i=0;
    char temp;
    //先把一个队伍的顺序定好 
    char team1[3]={'A','B','C'};
    //另外一个默认排序
    char team2[3]={'X','Y','Z'};
        //如果A和X对上了 
        if(team2[0]=='X')
        {   //交换X和X后面的对手 
            temp = team2[1];
            team2[1] = team2[0];
            team2[0] = temp;
            //如果C和X,Z对上了 
            if((team2[2]=='X')||(team2[2]=='Z')) 
            {   //交换值 
                temp = team2[2];
                team2[2] = team2[1];
                team2[1] = temp;
        //交换后有可能从x交换成Z,从Z交换成了X,所以要再次判断一下 
                if((team2[2]=='X')||(team2[2]=='Z'))
                {
                    temp = team2[2];
                    team2[2] = team2[0];
                    team2[0] = temp;
                }
            }   
        }
        printf("%s\n%s\n",team1 ,team2);

    return 0;
}

程序运行结果:
这里写图片描述


3、用C语言实现字符串中子字符串的替换, 成功返回0,失败返回-1.例如:“ABCDEFG”这个字符串,把其中”BCD”替换成“9527”这个子串,结果变成:“A9527EFG”

函数原型:
int str_replace(char * str, char * replaced_str, char *new_str)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值