【项目3-字符串复制】
下面的程序,将str1中除空格外的所有字符,复制到了str2中。
(1)完整复制字符串;
[参考解答]
还可以写作:
还可以写作:
(2)将str1和str2接起来存放到str3中;
[参考解答]
(3)去除str1中的空格,仍保存在str1中;
[参考解答]策略不是去除空格,而是复制非空格字符,不复制空格,这样,空格挂了。
在现实中,迟到的员工罚款,是一种办法;还有一种做法,奖励按时到的员工,迟到的没有奖。都是奖勤罚懒。
(4)将str1和str2连接起来,仍存放在str1中;
[参考解答]
下面的程序,将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;
}