C++第16周项目1(2)复制字符串/字符数组

简介: 课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565题目【项目1-小心地放开玩字符串/字符数组】(2)读程序,请分析其实现的功能[cpp] view plaincopyprint?#include<iostream>  using namespace std;  int main() 

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565


题目

【项目1-小心地放开玩字符串/字符数组】

(2)读程序,请分析其实现的功能

  1. #include<iostream>  
  2. using namespace std;  
  3. int main()  
  4. {  
  5.   char str1[50]="I am a happy boy\'s daddy.",str2[50];  
  6.   int i=0,j=0;  
  7.   for(i=0;str1[i]!='\0';i++)  
  8.   {    
  9.     if(str1[i]!=' ')  
  10.     {  
  11.       str2[j]=str1[i];  
  12.       j++;  
  13.     }  
  14.   }  
  15.   str2[j]='\0';//切记!!  
  16.   cout<<"整理后的字符串"<<str2<<endl;  
  17.   return 0;  
  18. }  
请自选下面有关字符串中字符统计的任务,完成两个即可。
  • 复制字符串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;    //下面复制str2
	while(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;    //下面复制str2
	while(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]不是空格,将复制
		else
			j++;    //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位置复制为str2
	i=len2-1;
	while(i>=0)
	{
		str1[i]=str2[i];
		i--;
	}
	cout<<"处理后的字符串是: "<<str1<<endl;
	return 0;
}



目录
相关文章
|
3月前
|
搜索推荐 编译器 C语言
【C++核心】特殊的元素集合-数组与字符串详解
这篇文章详细讲解了C++中数组和字符串的基本概念、操作和应用,包括一维数组、二维数组的定义和使用,以及C风格字符串和C++字符串类的对比。
103 4
WK
|
1月前
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
86 1
|
2月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
571 3
|
3月前
|
C++
【C++案例】一个项目掌握C++基础-通讯录管理系统
这篇文章通过一个通讯录管理系统的C++项目案例,详细介绍了如何使用C++实现添加、显示、删除、查找、修改和清空联系人等功能。
57 3
|
2月前
|
缓存 网络协议 API
C/C++ StringToAddress(字符串转 boost::asio::ip::address)
通过上述步骤和示例代码,你可以轻松地在C++项目中实现从字符串到 `boost::asio::ip::address`的转换,从而充分利用Boost.Asio库进行网络编程。
89 0
|
2月前
|
编译器 C语言 C++
C/C++数字与字符串互相转换
C/C++数字与字符串互相转换
|
3月前
|
C++
C++(十一)对象数组
本文介绍了C++中对象数组的使用方法及其注意事项。通过示例展示了如何定义和初始化对象数组,并解释了栈对象数组与堆对象数组在初始化时的区别。重点强调了构造器设计时应考虑无参构造器的重要性,以及在需要进一步初始化的情况下采用二段式初始化策略的应用场景。
|
3月前
|
C++
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
|
3月前
|
存储 C++
C++(五)String 字符串类
本文档详细介绍了C++中的`string`类,包括定义、初始化、字符串比较及数值与字符串之间的转换方法。`string`类简化了字符串处理,提供了丰富的功能如字符串查找、比较、拼接和替换等。文档通过示例代码展示了如何使用这些功能,并介绍了如何将数值转换为字符串以及反之亦然的方法。此外,还展示了如何使用`string`数组存储和遍历多个字符串。
|
28天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
50 2