C++第16周项目1(2)复制字符串/字符数组
来源:互联网 发布:java怎么打印所有汉字 编辑:程序博客网 时间:2024/05/21 09:15
课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565
题目
【项目1-小心地放开玩字符串/字符数组】
(2)读程序,请分析其实现的功能
- #include<iostream>
- using namespace std;
- int main()
- {
- char str1[50]="I am a happy boy\'s daddy.",str2[50];
- int i=0,j=0;
- for(i=0;str1[i]!='\0';i++)
- {
- if(str1[i]!=' ')
- {
- str2[j]=str1[i];
- j++;
- }
- }
- str2[j]='\0';//切记!!
- cout<<"整理后的字符串"<<str2<<endl;
- return 0;
- }
- 复制字符串str1,保存到str2中;
- 在字符串str2后面增加符号"//comment:"
- 将str1和str2接起来存放到str3中;
- 将str1中的空格去除,仍保存在str1中;
- 将str1和str2接起来,仍存放在str1中;
- 去除str1中的多余空格(即两个单词中间仅保留一个空格)。
- 在字符串前加5个符号"note:"
二、参考解答
1、复制字符串str1,保存到str2中
#include<iostream>using namespace std;int main(){char str1[50]="I am a happy boy\'s daddy.",str2[50];int i,j;for(i=0,j=0;str1[i]!='\0';i++){ str2[j]=str1[i];++j;}str2[j]='\0';//切记!!cout<<"整理后的字符串"<<str2<<endl;return 0;}
还可以写作:
#include<iostream>using namespace std;int main(){char str1[50]="I am a happy boy\'s daddy.",str2[50];int i=0,j=0;for(i=0;str1[i]!='\0';){ str2[j++]=str1[i++];//注意下标处的写法}str2[j]='\0';//切记!!cout<<"整理后的字符串"<<str2<<endl;return 0;}
还可以写作:
#include<iostream>using namespace std;int main(){char str1[50]="I am a happy boy\'s daddy.",str2[50];int i=0,j=0;while((str2[j++]=str1[i++])!='\0');//如此表达式!循环体为空cout<<"整理后的字符串"<<str2<<endl;return 0;}
怕被绕更迷糊了的,不要看下面的程序
#include<iostream>using namespace std;int main(){char str1[50]="I am a happy boy\'s daddy.",str2[50];int i=0,j=0;while(str2[j++]=str1[i++]); //其实和上面的程序等价cout<<"整理后的字符串"<<str2<<endl;return 0;}
2、在字符串str2后面增加符号"//comment:"
课堂上我提示找到str2的’\0’处,然后逐个赋值,太笨了。现在决定将要增加的字符串在程序中用一个字符串给出来,这是更能通用的办法。
#include<iostream>using namespace std;int main(){char str2[50];char str[20]={"//注释: 定义变量"};int i=0,j=0;cout<<"输入字符串:";gets(str2);while(str2[i]!='\0'){ i++;}while(str[j]!='\0'){str2[i++]=str[j++];}str2[i]='\0';cout<<"--------------------------"<<endl;cout<<"处理后的字符串是: "<<str2<<endl;return 0;}参考的运行结果
3、将str1和str2接起来存放到str3中;
#include<iostream>using namespace std;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; //下面复制str2while(str2[j]!='\0'){str3[i++]=str2[j++];}str3[i]='\0'; //一定要保证str3中有'\0',否则"烫烫烫烫"cout<<"处理后的字符串是: "<<str3<<endl;return 0;}
4、将str1和str2接起来,仍存放在str1中
#include<iostream>using namespace std;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; //下面复制str2while(str2[j]!='\0'){str1[i++]=str2[j++];}str1[i]='\0'; //一定要保证str3中有'\0',否则"烫烫烫烫"cout<<"处理后的字符串是: "<<str1<<endl;return 0;}
5、将str1中的空格去除,仍保存在str1中
策略不是去除空格,而是复制非空格字符,不复制空格,这样,空格挂了。
在现实中,迟到的员工罚款,是一种办法;还有一种做法,奖励按时到的员工,迟到的没有奖。都是奖勤罚懒。
#include<iostream>using namespace std;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]不是空格,将复制elsej++; //str[j]为空格时,没有进行复制//j++而没有i++,所以只要有空格,j的值一定会大于i的//不管是否有空格,j一直勇往直前,i则遇空格就休息}str[i]='\0'; //str[i]处是复制结束后的位置cout<<"处理后的字符串是: "<<str<<endl;return 0;}
看下面的截图,理解程序。如果困难,自己单步执行观察一下。
6、去除str1中的多余空格(即两个单词中间仅保留一个空格)。
#include <iostream> using namespace std; int main() { char str[]="Only one space is allowed between the two words."; cout<<"原始难看的句子:"<<str<<endl;int i=0,j=0;bool notSpace;while(str[j]==' ')//忽略开始的若干个空格j++;notSpace=true; while(str[j]!='\0'){if (str[j]!=' ') {notSpace=true;str[i++]=str[j++]; // 不是空格,复制 }else if (notSpace) //是空格,但目前是第一个(因为之前notSpace=true;的条件是遇非空格){ notSpace=false; //第一个空格仍然要复制str[i++]=str[j++]; }else //如遇第二个或更后的空格,正是由于遇到第一个空格并复制后,notSpace=false;的原因,会走到这儿{j++; //不复制}}str[i]='\0';cout<<"整理后的句子是:"<<str<<endl;return 0;}
7、在字符串前加5个符号"note:"
#include<iostream>using namespace std;int main(){char str1[40]={"I am a boy."};char str2[20]={"note:"};int i=0,len2=0;//下面将把str2插入到str1的开头部分,并且保存在str1中//先求出str2的“长度”while(str2[len2]!='\0'){ len2++;}//str2中有len2个字符//找到str1中结尾的位置i=0; while(str1[i]!='\0'){i++;}//由后往前,整体往后“搬迁”len2个位置while(i>=0){str1[i+len2]=str1[i];i--;}//空出的前len2位置复制为str2i=len2-1;while(i>=0){str1[i]=str2[i];i--;}cout<<"处理后的字符串是: "<<str1<<endl;return 0;}
- C++第16周项目1(2)复制字符串/字符数组
- C++第16周项目1(1)统计字符串/字符数组
- 第16周项目2-用指针玩字符串(2.删除字符数组做形参)
- 第16周项目2-去除字符串中指定字符(数组、指针作形参)
- 第十三周 项目五--字符串操作(2.2)字符串复制功能---两个数组中的字符复制在一个数组中
- 第16周项目2.2 去除特定字符c 结果仍保存到原字符串中 用数组名做形参
- 【数组名】第17周项目2--去除str中的特定字符c(空格),结果保存到原字符串中
- 第13周项目5(2)复制字符串
- 第13周项目5(2)复制字符串
- 第16周项目2去除字符串中特定字符
- 第13周项目4(2)字符数组排序
- 第13周项目4(2)-字符数组排序
- 第13周项目5(2)1-完整复制字符串
- 第13周 项目5-字符串操作(2)-<完成复制字符串>
- 第13周项目5-(2)字符串操作完成类似字符串复制的操作
- 第16周项目2-用指针操作字符串(2、删除字符指针做形参)
- C++第16周项目2——带姓名的成绩单(字符数组版)
- C++ 复制字符串/字符数组
- 设计模式之适配器
- object-c 扯淡篇 第十五天
- 讨论开发人员的职业发展走向
- register_chrdev & devfs_register_chrdev
- 思路的转变
- C++第16周项目1(2)复制字符串/字符数组
- sscanf
- Android210 调试支持 wince6.0系统
- 在应用程序运行时,按HOME键返回到手机桌面,背景音乐怎样自动关闭
- 【移动产品】ArcGIS SDK for Android的下个版本将会是什么样子?
- 怎么获取sequence当前值
- 由accumulate()扩展出来的一系列方法
- Javascript 加括号运行写法 和 addEventListener方法(备忘)
- Minimum Path Sum