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

来源:互联网 发布:it入门教程 编辑:程序博客网 时间:2024/05/29 18:38

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


【项目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;}


0 0
原创粉丝点击