C++ Primer复习和学习笔记 第五章 表达式





/*
这个程序中最重要的两个地方就是在控制台上面进行输入的时候,上一次输入对下一次的输入产生了影响。
导致下一次无法进行输入,无法读入数据.cin.ignore();//这个语句用来忽略上次的输入,cin.clear();
这个语句用来清除控制台上面的错误标识, 在学到iostream  哪一张的时候,就会降到错误标志。
*/
/*
C1 字符串的操作
设计要求:
自定义函数实现对字符串的相关操作,不允许使用C++中的系统函数
实现功能:
1 设计菜单实现功能选择(用cout输出列表)
2 字符串的输入(赋给字符数组)
3 字符串的运算:(要求用五个子函数,在每个子函数中用指针分别实现下述功能,用指向函数的指针指向这五个子函数)
(1)复制 (2)连接 (3)查找
(4)交换 (5)比较
4 字符串的输出
*/
//这个函数用来实现复制,输入一个字符串会复制一个字符串,并输出原来的字符串,和复制的字符串。直到输入Ctrl+z。

#include "iostream"
#include "string"
#include "vector"
#include "cstring"
using namespace std;

int copy_string();//复制函数的声明
int cat_string();//连接操作函数声明
int  search_string();//调用查找操作函数
int exchange_string();//调用交换操作函数
int compare_string();//调用比较操作函数


int main()
{
	cout<<"---------------------------------------------------------------------------"<<endl;
	cout<<"|请选择您需要使用的功能,输入指定的数字即可:                             |"<<endl;
	cout<<"|                                                                         |"<<endl;
	cout<<"| (1)复制 (2)连接 (3)查找   (4)交换 (5)比较    (6)退出程序    |"<<endl;
	cout<<"|                                                                         |"<<endl;
	cout<<"|  例如:输入1     则进行字符串复制功能!                                  |"<<endl;
	cout<<"---------------------------------------------------------------------------"<<endl;
	int iselectnum = 0;
	
	while ((cin>>iselectnum)&&(iselectnum!=6))
	{
		switch (iselectnum)
		{
		case 1:
			//调用复制操作函数
			cout<<"调用复制操作函数:"<<endl;
			cout<<endl;
			copy_string();
		break;
		case 2:
			//调用连接操作函数
			cout<<"调用连接操作函数:"<<endl;
		    cout<<endl;
			cat_string();
		break;
		case 3:
			//调用查找操作函数
			cout<<"调用查找操作函数:"<<endl;
			cout<<endl;
			search_string();
		break;
		case 4:
			//调用交换操作函数
			cout<<"调用交换操作函数:"<<endl;
			cout<<endl;
			exchange_string();
		continue;
		case 5:
			//调用比较操作函数
			cout<<"调用比较操作函数:"<<endl;
			cout<<endl;
			compare_string();
		break;
		default:
			cout<<"您输入错误的选项,请重新输入:"<<endl;
			cout<<endl;
		break;
		}
	}
	cout<<"程序关闭,即将推出!"<<endl;
	return 0;
}


int copy_string()	//复制操作函数
{
	cout<<"请输入一个字符串,然后程序将会输出源字符串和复制后的字符串:"<<endl;
	
	string  str;
	cin>>str;

	char *  pStr_d = new char[str.size()+1];

	for (size_t  i=0;i != str.size();++i)
	{
		pStr_d[i] = str[i];
	}
	cout<<endl;
	cout<<"您输入的源字符串是:"<<str<<"复制后的字符串是:";
	for (size_t  i=0;i != str.size();++i)
	{
		cout<<pStr_d[i]<<" ";
	}	
	cout<<endl;
	cout<<endl;
	cout<<"本次复制操作完成,请选择下次操作类型:"<<endl;
	cout<<endl;
	return 0;
}


int cat_string()//连接操作函数--------------------------2------------------------///******************有问题不能进行循环
{
	cout<<"请输入一系列的字符串,然后程序将会输出合并后的字符串:"<<endl;

	vector<string>   vstr;
	string  str;
	while (cin>>str)
	{
		vstr.push_back(str);
	}
	string s_total;
	for (vector<string>::iterator iter=vstr.begin();iter!=vstr.end();++iter)
	{
		s_total=s_total+(*iter);
	}
	cout<<"合并后的字符串是:"<<s_total<<endl;
	cout<<endl;
	cin.ignore();
	cin.clear();
	cout<<"本次连接操作完成,请选择下次操作类型:"<<endl;
	return 0;
}

int exchange_string()//交换操作函数
{
	cout<<"请您输入两个字符串,完成交换操作后,将输出:"<<endl;
	string  str1,str2;
	cin>>str1>>str2;
	cout<<"原始两个字符串是"<<str1<<"   "<<str2<<endl;
	char *  pStr_d1 = new char[str1.size()+1];

	for (size_t  i=0;i != str1.size();++i)
	{
		pStr_d1[i] = str1[i];
	}

	char *  pStr_d2 = new char[str2.size()+1];

	for (size_t  i=0;i != str2.size();++i)
	{
		pStr_d2[i] = str2[i];
	}
	char * temp;
	
	temp=pStr_d1;
	pStr_d1=pStr_d2;
	pStr_d2=temp;

	cout<<"交换后的字符串是:";
	for (size_t  i=0;i != str2.size();++i)
	{
		cout<<pStr_d1[i];
	}
	cout<<"    ";
	for (size_t  i=0;i != str1.size();++i)
	{
		cout<<pStr_d2[i];
	}
	cout<<endl;
	cout<<"本次交换操作完成,请选择下次操作类型:"<<endl;
	return 0;
}


int  search_string()//调用查找操作函数
{

	cout<<"请您输入一系列的字符串,作为查找资源,然后输入ctrl+z。结束查找资源的输入:"<<endl;
	vector<string>  vs;
	string vsstr;
	while (cin>>vsstr)
	{
		vs.push_back(vsstr);
	}
	cin.ignore();
	cout<<"接着请输入一个需要查找的字符串:"<<endl;
	cin.ignore();
	cin.clear();//必须有这个用来清除错误标志ctrl+z
	string str_search;
	getline(cin,str_search);
	cout<<"\n您输入的要查找的字符串是:"<<str_search<<endl;
	int n=1;
	bool  result = false;
	for (vector<string>::iterator iter=vs.begin();iter!=vs.end();++iter,++n)
	{
		if (*iter==str_search)
		{
			cout<<"已经查找到了您要查找的字符串"<<*iter<<"它在刚刚输入的查找资源中的第"<<n<<"个位置上"<<endl;
			result = true;
		} 
		else
			if(iter==vs.end()&&result==false)
			{
				cout<<"没有找到您输入的字符串!"<<endl;
			}
	}
	cin.ignore();
	cin.clear();
	cout<<"本次比较操作完成,请选择下次操作类型:"<<endl;
	return 0;
}

int compare_string()//调用比较操作函数
{
	string  str1,str2;
	cout<<"请输入两个将要进行比较的字符串str1和str2:"<<endl;
	cin>>str1>>str2;
	if (str1==str2)
	{
		cout<<"两个字符串相等"<<endl;
	} 
	else
		if(str1>str2)
	{
		cout<<"字符串: "<<str1<<" 大于 "<<str2<<endl;
	}
		else
			if(str1<str2)
		{
			cout<<"字符串: "<<str1<<" 小于 "<<str2<<endl;
		}
	cout<<"本次比较操作完成,请选择下次操作类型:"<<endl;
			return 0;
}



/*
编写程序定义一个 vector 对象,其每个元素都是指向string 类型的指针,
读取该 vector 对象,输出每个string 的内容及其相应的长度。
*/

#include "iostream"
#include "bitset"
#include "vector"

using namespace std;

int main()
{
	vector<string *>     strptr;

	string str;
	while (cin>>str)
	{
		string * pstr=new  string;//string * pstr=new  string[str.size()];为什么不能这么写
		*pstr = str;
		strptr.push_back(pstr);
	}
	//输出每个string的内容及其相应的长度
	vector<string*>::iterator iter=strptr.begin();
	while(iter!=strptr.end())
	{
		cout<<"The string  :"<<**iter<<"----size  is ------"<<(**iter).size()<<endl;
		iter++;
	}
	//释放各个动态分配的string对象
	iter=strptr.begin();
	while (iter!=strptr.end())
	{
		delete *iter;
		iter++;
	}
	return  0;
}


编写程序输出每种内置类型的长度。

#include "iostream"

using namespace std;


int main()
{
	    cout << "type\t\t\t" << "size" << endl
		<< "bool\t\t\t" << sizeof(bool) << endl
		<< "char\t\t\t" << sizeof(char) << endl
		<< "signed char\t\t" << sizeof(signed char) << endl
		<< "unsigned char\t\t" << sizeof(unsigned char) << endl
		<< "wchar_t\t\t\t" << sizeof(wchar_t) << endl
		<< "short\t\t\t" << sizeof(short) << endl
		<< "signed short\t\t" << sizeof(signed short) << endl
		<< "unsigned short\t\t" << sizeof(unsigned short) << endl
		<< "int\t\t\t" << sizeof(int) << endl
		<< "signed int\t\t" << sizeof(signed int) << endl
		<< "unsigend int\t\t" << sizeof(unsigned int) << endl
		<< "long\t\t\t" << sizeof(long) << endl
		<< "sigend long\t\t" << sizeof(signed long) << endl
		<< "unsigned long\t\t" << sizeof(unsigned long) << endl
		<< "float\t\t\t" << sizeof(float) << endl
		<< "double\t\t\t" << sizeof(double) << endl
		<< "long double\t\t" << sizeof(long double) << endl;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值