C语言练习题(11)

1、改错:

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

(b)、void test2()
    {
        char string[10], str1[10];
        for (i=0; i<10; i++)
        {
            str1[i] = 'A';
        }
        strcpy(string, str1);
    }
    (c)、void test3(char *str)
    {
        char string[10];
        if (strlen(str1)<=10)
        {
            strcpy(string, str1);
        }
    }   
//a.字符串str1大小超出数组string范围
//b.字符数组之间赋值不能用strcpy,应用循环赋值
//c.strlen不包含字符串结束符'\0',strcpy可能超出数组范围

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

#include 
int main(void)
{
    char ret[3] = {};
    char mem[3] = { 'X','Y','Z' };

    int i = 0;
    for (i = 0; i < 3; i++)//甲队的C
    {
        ret[2] = mem[i];
        if (ret[2] != 'X' && ret[2] != 'Z')
        {
            mem[i] = '0';
            break;
        }
    }

    for (i = 0; i < 3; i++)//甲队的A
    {
        ret[0] = mem[i];
        if (mem[i] != '0' && ret[0] != 'X')
        {
            mem[i] = '0';
            break;
        }
    }

    for (i = 0; i < 3; i++)//甲队的B
    {
        ret[1] = mem[i];
        if (mem[i] != '0')
            break;
    }

    for (i = 0; i < 3; i++)//输出
    {
        printf(" %c-%c ", i + 'A', ret[i]);
    }
    return 0;
}

3、用C语言实现字符串中子字符串的替换, 成功返回0,失败返回-1.例如:“ABCDEFG”这个字符串,把其中”BCD”替换成“9527”这个子串,结果变成:“A9527EFG”
函数原型:
int str_replace(char str, char replaced_str, char *new_str)

#include 
#include 
#define NUM 50
int str_replace(char*str, char*replaced_str, char*new_str)//str,目标字符串,新字符串
{
    char *str_head = str;//储存str头指针用于最后输出
    char *str_midle_head = str;//在str中指向目标字符串的首位置
    char *str_midle_tail = str;//在str中指向目标字符串的末位置
    char str_tail[NUM] = {};//储存str中目标字符串之后的内容

    while (*str_midle_head != *replaced_str)//在str中找到目标字符串的首位置
        str_midle_head++;

    while (*(replaced_str + 1) != '\0')//在str中找到目标字符串的末位置
        replaced_str++;
    while (*str_midle_tail++ != *replaced_str);
    strcpy(str_tail, str_midle_tail);//储存末位置之后的内容

    strcpy(str_midle_head, new_str);
    strcpy(str_midle_head + strlen(new_str), str_tail);

    if (!strlen(str_head))
        return -1;

    else
        printf("%s", str_head);
    return 0;
}

int main(void)
{
    char* new_str = "Alien";
    char ret[NUM] = { "abcdefg" };

    str_replace(ret, "d", new_str);

    return 0;
}

你可能感兴趣的:(C语言练习题(11))