《C语言及程序设计》实践参考——字符串复制

返回:贺老师课程教学链接  实践要求


【项目3-字符串复制】
下面的程序,将str1中除空格外的所有字符,复制到了str2中。
#include <stdio.h>
int main()
{
    char str1[100]="I am a happy boy\'s daddy.",str2[100];
    int i=0,j=0;
    while(str1[i]!='\0')
    {
        if(str1[i]!=' ')
        {
            str2[j]=str1[i];
            j++;
        }
        i++;
    }
    str2[j]='\0';//切记!!
    printf("去除空格后的字符串: %s\n", str2);
    return 0;
}
请分别编制程序,完成下面的处理:
(1)完整复制字符串;
[参考解答]
#include <stdio.h>
int main()
{
    char str1[100]="I am a happy boy\'s daddy.",str2[100];
    int i,j;
    for(i=0,j=0; str1[i]!='\0'; i++)
    {
        str2[j]=str1[i];
        ++j;
    }
    str2[j]='\0';//切记!!
    printf("复制后的字符串: %s\n", str2);
    return 0;
}
还可以写作:
#include <stdio.h>
int main()
{
    char str1[100]="I am a happy boy\'s daddy.",str2[100];
    int i=0,j=0;
    for(i=0; str1[i]!='\0';)
    {
        str2[j++]=str1[i++];//注意下标处的写法
    }
    str2[j]='\0';//切记!!
    printf("复制后的字符串: %s\n", str2);
    return 0;
}

还可以写作:
#include <stdio.h>
int main()
{
    char str1[100]="I am a happy boy\'s daddy.",str2[100];
    int i=0,j=0;
    while((str2[j++]=str1[i++])!='\0');//如此表达式!循环体为空
    printf("复制后的字符串: %s\n", str2);
    return 0;
} 

还可以写作:
#include <stdio.h>
int main()
{
    char str1[100]="I am a happy boy\'s daddy.",str2[100];
    int i=0,j=0;
    while(str2[j++]=str1[i++]);  //其实和上面的程序等价
    printf("复制后的字符串: %s\n", str2);
    return 0;
}

(2)将str1和str2接起来存放到str3中;
[参考解答]
#include <stdio.h>
int main()
{
    char str1[20]= {"int i,a[100];"};
    char str2[20]= {"//注释: 定义变量"};
    char str3[40];
    int i=0,j=0;
    while(str1[j]!='\0')  //复制str1
    {
        str3[i++]=str1[j++];
    }
    j=0;    //下面复制str2
    while(str2[j]!='\0')
    {
        str3[i++]=str2[j++];
    }
    str3[i]='\0';  //一定要保证str3中有'\0'
    printf("处理后的字符串是: %s\n", str3);
    return 0;
}

(3)去除str1中的空格,仍保存在str1中;
[参考解答]策略不是去除空格,而是复制非空格字符,不复制空格,这样,空格挂了。
在现实中,迟到的员工罚款,是一种办法;还有一种做法,奖励按时到的员工,迟到的没有奖。都是奖勤罚懒。
#include <stdio.h>
int main()
{
    char str[40]= {"I am a boy."};
    int i=0,j=0;
    while(str[j]!='\0')  //找到str的结束
    {
        if(str[j]!=' ')
            str[i++]=str[j++];  //如果str[i]不是空格,将复制
        else
            j++;    //str[j]为空格时,没有进行复制
                    //j++而没有i++,所以只要有空格,j的值一定会大于i的
                    //不管是否有空格,j一直勇往直前,i则遇空格就休息
    }
    str[i]='\0';    //str[i]处是复制结束后的位置
    printf("处理后的字符串是: %s\n", str);
    return 0;
}

(4)将str1和str2连接起来,仍存放在str1中;
[参考解答]
#include <stdio.h>
int main()
{
    char str1[40]= {"I am a boy."};
    char str2[20]= {"//注释: 废话一句"};
    int i=0,j=0;
    while(str1[i]!='\0')  //找到str1的结束
    {
        i++;
    }
    j=0;    //下面复制str2
    while(str2[j]!='\0')
    {
        str1[i++]=str2[j++];
    }
    str1[i]='\0';  //一定要保证str1中有'\0'
    printf("处理后的字符串是: %s\n", str1);
    return 0;
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迂者-贺利坚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值