C++ string型字符串
来源:互联网 发布:无缝贴图软件中文版 编辑:程序博客网 时间:2024/05/22 12:35
1、string字符串简介
string型字符串是用string类来定义字符串的,因此要使用string类;程序的开头要添加头文件;还要使用std::string 指令;我们在使用string类的时候不用考虑如何将字符串存放到数组中,我们可以像定义一个整形变量那样使用就行了.
如:string str;这样就定义了一个字符串;
2、string型和char型字符串的异同
代码:
# include <iostream>
# include <string>
using std::string;
using std::cout;
using std::cin;
using std::endl;
int main()
{
string str="string型字符串!";
char ch[]={"char型字符数组!"};
cout<<str<<endl;
cout<<ch<<endl;
cout<<"请输入狗的英文单词:"<<endl;
cin>>str;
if(str=="dog")
{
cout<<"狗:"<<str<<endl;
cout<<str<<"的第一个字符是:"<<str[0]<<endl;
}
else
cout<<"您输入的单词错误,请重新输入!"<<endl;
cout<<"请输入猪的英文单词:"<<endl;
cin>>ch;
if(ch=="pig")
{
cout<<"猪:"<<ch<<endl;
cout<<ch<<"的第一个字符是:"<<ch[0]<<endl;
}
else
cout<<"您输入的单词错误,请重新输入!"<<endl;
return 0;
}
测试:
string型字符串!
char型字符数组!
输入dog,显示
狗:dog
dog的第一个字符是d
输入pig,显示
您输入的单词错误,请重新输入!
解析:
if(ch=="pig") 我们知道数组名代表第一个元素的内存地址,而引号里面的字符串也代表第一个元素的内存地址,这两个内存地址根本就不可能相等!
解决办法:
# include <iostream>
# include <string>
using namespace std;
int check(char a[]);
int main()
{
string str="string型字符串!";
char ch[]={"char型字符数组!"};
cout<<str<<endl;
cout<<ch<<endl;
cout<<"请输入狗的英文单词:"<<endl;
cin>>str;
if(str=="dog")
{
cout<<"狗:"<<str<<endl;
cout<<str<<"的第一个字符是:"<<str[0]<<endl;
}
else
cout<<"您输入的单词错误,请重新输入!"<<endl;
cout<<"请输入猪的英文单词:"<<endl;
cin>>ch;
if(check(ch))
{
cout<<"猪:"<<ch<<endl;
cout<<ch<<"的第一个字符是:"<<ch[0]<<endl;
}
else
cout<<"您输入的单词错误,请重新输入!"<<endl;
return 0;
}
int check(char a[])
{
char b[]="pig";
int i;
bool quit=false;
for(i=0;i<strlen(b);i++)
{
if(a[i]!=b[i])
quit=true;
break;
}
if(quit==false)
return 1;
else
return 0;
}
使用一个循环函数!
程序还可以这样写:
# include <iostream>
# include <string>
using namespace std;
int check(char a[],char b[]);
int main()
{
string str="string型字符串!";
char ch[]={"char型字符数组!"};
cout<<str<<endl;
cout<<ch<<endl;
cout<<"请输入狗的英文单词:"<<endl;
cin>>str;
if(str=="dog")
{
cout<<"狗:"<<str<<endl;
cout<<str<<"的第一个字符是:"<<str[0]<<endl;
}
else
cout<<"您输入的单词错误,请重新输入!"<<endl;
cout<<"请输入猪的英文单词:"<<endl;
cin>>ch;
if(check(ch,"pig"))
{
cout<<"猪:"<<ch<<endl;
cout<<ch<<"的第一个字符是:"<<ch[0]<<endl;
}
else
cout<<"您输入的单词错误,请重新输入!"<<endl;
return 0;
}
int check(char a[],char b[])
{
int i;
for(i=0;i<strlen(b);i++)
{
if(a[i]==b[i])
return 1;
else
return 0;
}
}
还可以用strcmp函数,但是也不是很方便
# include <iostream>
# include <string>
using namespace std;
int main()
{
string str="string型字符串!";
char ch[]={"char型字符数组!"};
cout<<str<<endl;
cout<<ch<<endl;
cout<<"请输入狗的英文单词:"<<endl;
cin>>str;
if(str=="dog")
{
cout<<"狗:"<<str<<endl;
cout<<str<<"的第一个字符是:"<<str[0]<<endl;
}
else
cout<<"您输入的单词错误,请重新输入!"<<endl;
cout<<"请输入猪的英文单词:"<<endl;
cin>>ch;
if(!strcmp(ch,"pig"))
{
cout<<"猪:"<<ch<<endl;
cout<<ch<<"的第一个字符是:"<<ch[0]<<endl;
}
else
cout<<"您输入的单词错误,请重新输入!"<<endl;
return 0;
}
3、未命名字符串
cout<<"pig";
就是未命名字符串,只能读取,不能更改!
4、string类字符串的合并
程序一:(全部合并)
# include<iostream>
#include <string>
using namespace std;
int main()
{
string str1="What is your name?";
string str2="My name is Mike!";
str1=str2+str1;
cout<<strlen(str1.c_str())<<endl;
//我们知道char型字符串可以用strlen表示长度,在string类中也可以使用,只不过要将string字符串转化成char型字符串,转化方式是调用string类的一个函数c_str(),计算出来的长度为可见字符的长度!
cout<<str1.size()<<endl;
//size()是string类的成员函数,可以求结束标志之前的字符串长度
cout<<str1<<endl;
cout<<str2<<endl;
string str3;
cout<<str3.size()<<endl;
//由于未初始化的string字符串是个空对象,没有填充任何标志,只有字符串结束标志!
cout<<str3.length()<<endl;
//size()和length()的不同之处在于,size()可以兼容STL,其余的用法是相同的。
return 0;
}
程序二:(全部合并)
# include<iostream>
# include<string>
using namespace std;
int main()
{
string str1="ab";
string str2="abcdef";
str1.append(str2,2,3);
//该函数同样有3个参数,第二个参数确定复制字符串的位置,(表示的下标)即从str2的哪个字符开始复制,第三个参数代表复制的个数
cout<<str1<<endl;
cout<<str2<<endl;
return 0;
}
5、string类字符串的替换
程序一
# include<iostream>
# include<string>
using namespace std;
int main()
{
string str1="gfid";
string str2="abcdef";
str1.replace(1,2,str2,4,1);
//第一个为str1中要替换的起始位置(表示从下标为1的字符串开始复制)
//第二个为str1中要替换的个数(表示要替换2个字符串)
//第三个为str2
//第四个为str2中的哪个字符开始复制(表示从下标为4的字符串开始复制)
//第五个为str2中要复制的个数(表示将要复制1个字符)
//重载方式有很多种,str1.replace(1,2,str2,4,1);只是其中的第三种。
cout<<str1<<endl;
cout<<str2<<endl;
return 0;
}
运行结果:
ged
abcdef
程序二:
# include<iostream>
# include<string>
using namespace std;
int main()
{
string str1="abcdef";
char str2='A';
str1.replace(1,2,3,str2);
//第一个的str1中要替换的起始位置(表示从下标为1的字符串开始复制)
//第二个为str1中要替换的个数(表示要替换2个字符串)
//第三个为str2中要替换的字符的字符的个数
//第四个为str2
//重载方式有很多种,str1.replace(1,2,str2,4,1);只是其中的第五种
cout<<str1<<endl;
cout<<str2<<endl;
return 0;
}
运行结果:
aAAAdef
A
6、string型字符串的拷贝
# include<iostream>
# include<string>
using namespace std;
int main()
{
string str1 = "abcdefghijklmn";
char ch2[] = "1234567890";
cout<<"源字符串:"<<ch2<<endl;
int n=str1.copy(ch2,8,5);
//第二个参数表示从str1要拷贝8个参数,第三个表示从str1的下标为5的开始拷贝!n表示拷贝的个数;
cout<<"拷贝了 : "<<n<<"字符"<<endl;
cout<<"拷贝后 : "<<ch2<<endl;
return 0;
}
运行结果:
源字符串:1234567890
拷贝了8个字符
拷贝后:fghijklm90
7、string型字符串的插入
# include<iostream>
# include<string>
using namespace std;
int main()
{
string str1 ="123789";
string str2 ="456";
str1.insert(3,str2,0,3);
//第一个表示从str1的第3个元素之后开始插入
//第二个为str2
//第三个为从str2的下标为0的元素开始复制
//第四个为复制的个数为3
cout<<str1<<endl;
return 0;
}
运行结果:
123456789
- c#-string 字符串相关
- [C++]string分割字符串
- C++_字符串(string)
- C#---字符串String
- C++string字符串1.1
- C#-String字符串操作
- c 字符串与C++string
- C string 字符串 学习笔记
- string类和c字符串
- C风格字符串&string类型
- [C#][转][string 字符串截取
- c++string字符串的输出
- C++builder 中字符串、string
- c++string 字符串类型用法
- c 风格字符串和string
- C# lock string 字符串 "暂留"
- C风格字符串,int型,string类型相互转换
- C风格字符串(C-style character string)
- tmux
- 最全的Mac OS X【快捷键组合】汇总
- nyoj 14 会场安排问题
- 判断花括号是否匹配
- sms 短信/采信
- C++ string型字符串
- mysql if case
- C++ 视频学习笔记
- 京东快捷支付的安全隐患
- Hbase架构简介、实践
- 第十七周项目电子词典结构体版
- Eclipse与Derby集成
- 大话设计模式C++实现-第18章-备忘录模式
- 第17周项目6--学生成绩统计