12.23练习题

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);
}
}
没有字符串的大小,且字符串复制之后会因为函数的结束而被释放。
2、找赛手:2个羽毛球队比赛,各出3人,每个人只比一次。甲队为A,B,C三人,乙队为X,Y,Z三人。有人打听比赛名单,A说他不和X比,C说不和X,Z比。编程找出三队赛手的名单.

#include <stdio.h>
 int main(void)
{
    int i = 0;
    int j = 0;
    for (i='a'; i<'d'; i++)
    {
        for (j='x'; j<='z'; j++)
        {
            if((i=='a' && j== 'x')  ||  (i=='c' && (j=='x' || j=='z')))
                ;//符合题意的话什么都不做。
            else
                printf("%c and %c.\n", i, j);
        }
    }
    return 0;
}
/*
a and y.
a and z.
b and x.
b and y.
b and z.
c and y.
*/

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


#include <stdio.h>
#include <string.h>
int replace(char *replaced_str, char *new_str, int len)
{
    int i = 0, j = 0, q = 0;

            //  printf("ok\n");
    q =  len - strlen(new_str);
    if (0 == q)                                                     //新字符串与被替换字符串等长 
    {
        for (i=0; i<strlen(new_str); i++)
        {
            replaced_str[i] = new_str[i];
        }
    }
    else if (q > 0)                                                 //新字符串更短 
    {
        for (i=0; i<strlen(new_str); i++)
        {
            replaced_str[i] = new_str[i];
        }
        for (i; replaced_str[i+q]; i++)
        {
            replaced_str[i] = replaced_str[i+q];
        }
        replaced_str[i] = 0;
    }
    else                                                            //新字符串更长
    {
    //  printf("ok\n");
        char  *p = replaced_str;
        //printf("ok\n");
        int len = strlen(replaced_str);
        replaced_str += strlen(replaced_str);
        replaced_str--;
        printf("%c\n", *replaced_str);
    //  while(++replaced_str);
        replaced_str = replaced_str - q;  //q是负的 
        int w = 0;
        printf("%c\n", *replaced_str);     // 
        while(w < len)
        {
            *replaced_str = *(replaced_str - q);      ///
            replaced_str -= 1;
            w++;
        }
        //printf("ok\n");
        for (i=0; i<strlen(new_str); i++)
        {
            printf ("%c = ", *(p+i));
            *(p+i)= new_str[i];
            printf ("%c\n", (*p)); 
        } 
        //printf("ok\n");
    }
    return 1;
}
int str_replace(char *str, char * replaced_str, char *new_str) 
{
    int i = 0, j = 0, len = strlen(replaced_str), q = 0;
//  int *p = (int *)malloc(strlen(str)/len);
//  printf("%d\n", len);
    for (i=0; str[i]; i++)
    {
        if (str[i] == replaced_str[0])
        {
            for (j=0; j<len; j++)
            {
                if (str[i+j] != replaced_str[j])
                {
                    break;
                }
            }
            if (j == len)
            {
            //  printf("ok\n");
                printf("%c\n", str[i]);
                q = replace(&str[i], new_str, len);
            }
        //  printf("ok\n");  no
        }
    }
//  printf("%d\n", i);
    return q;
}
int main(void)
{
    char s[20] = "ABCDEFG";
    if(str_replace(s,"BCD","9527"))
        printf("%s.\n", s);
    else
        printf("失败.\n");
    return 0;
}

不会了

### 回答1: icarus-3.3.12.23是一个版本号,通常用于软件开发或系统更新的标识。它表示某个软件、操作系统或系统组件的版本,其中icarus可能是软件或项目的名称,3.3.12.23则代表该软件或项目的具体版本号。 版本号常用于区分不同版本的软件,以便用户能够追踪和了解软件的开发历程和功能更新。在软件开发过程中,每个版本通常会修复一些已知的问题、提供一些新功能或改进现有功能。因此,通过版本号,用户可以知道当前软件所具备的功能和性能,并据此决定是否进行升级或更新。 icarus-3.3.12.23的版本号中的每个数字可能代表特定含义。例如,3可能表示第三个主要版本,3.3可能表示该版本有三个次要更新,12表示该版本的第12个修复,23可能表示该版本的第23个小改进。 总之,icarus-3.3.12.23是一个版本号,用于表示某个软件或项目的具体版本,可以帮助用户识别软件的发展历程和了解软件的功能和性能。 ### 回答2: icarus-3.3.12.23是一个版本号。版本号通常用来标识软件、应用程序或系统的特定版本。在这个例子中,icarus-3.3.12.23可能是一个软件或应用程序的版本号。 版本号通常由一串数字和点号组成,每个点号之间的数字代表不同的层级。以icarus-3.3.12.23为例,最左边的数字3可能代表主要版本号,表示该软件或应用程序经历了重大的改进或功能增加。接下来的3.12可能代表次要版本号,表示该版本引入了一些较小的更改或修复。最后的23可能代表修订版本号,表示对该软件或应用程序进行了一些小的修改或更新。 版本号的目的是为了帮助用户和开发人员追踪和识别软件的不同版本。通过版本号,用户可以了解到一个软件或应用程序的重要特点、功能和修复的问题。对于开发人员来说,版本号对于记录和追踪代码更改以及软件版本的发布也非常重要。 总之,icarus-3.3.12.23是一个标识某个软件或应用程序特定版本的版本号,它帮助用户和开发人员追踪软件版本、功能和修复的重要工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值