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


0 0
原创粉丝点击