/*
这个程序中最重要的两个地方就是在控制台上面进行输入的时候,上一次输入对下一次的输入产生了影响。
导致下一次无法进行输入,无法读入数据.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;
}