众所周知,C++中有两种类型类型的字符串,一种是
    
     
      STL的string容器
     
    
    ,另一种是
    
     
      char类型的数组
     
    
    。
   
    
     
      一.基本区别
     
    
   
    要说最基本的区别,就是
    
     string可以包含多个字符,char类型只有1个字符
    
    ,且分别用
    
     双引号
    
    和
    
     单引号
    
    :
   
	string temp1="7371";
    char c='3';
	char temp2[5]="7166";
    联系在于,string类型支持通过下标访问,
    
     
      对于string每一位,都是char类型的字符而非string字符串!
     
    
   
string temp;
	for(int i=0;i<=2;i++)
	{
		temp[i]='*';
		cout<<temp[i];	
	} 
    如上述代码,将string的每一位用
    
     
      ‘*’
     
    
    字符赋值。
   
    虽然string的每一位为char型的字符,而并非string类型的字符串,
    
     但string类型可以采用“+”运算符拼接
     
      string字符串,或者char型字符
     
    
    。如下,三种赋值方式均正确!
   
		temp+="jsl&hyh";
		temp5+="*";
		temp5+='*';
    
     
      注意,char类型的数组不能使用这种“+”的运算方式扩容。
     
    
   
    
     
      二.与vector容器混用
     
    
   
对于vector<string>和vector<char>两种类型,在用法上面存在一定的区别。
vector<string> S1;
	vector<char> C1;
	for(int i=1;i<=7;i++)
	{
		string temp;
		cin>>temp;
		S1.push_back(temp);
		cout<<S1[i-1];
	}
	cout<<endl;
	for(int i=1;i<=7;i++)
	{
		char temp;
		cin>>temp;
		C1.push_back(temp);
		cout<<C1[i-1];
	}
    如上述一段代码,虽然容量均为7,但
    
     string类型的vector明显可以存放更多的字符
    
    ,而char类型的上限仅有7。即便存放相同的7位字符串“
    
     
      jsl&hyh
     
    
    ”,意义此处也不同:对于string类型的,每一个j,s等元素,
    
     
      都是单独的一位字符串
     
    
    ,而
    
     
      char中的每一个元素仅仅是字符
     
    
    !这是一个初学者经常容易混淆的内容。
   
    此外,还有一个容易混淆的地方:
    
     
      char类型的数组可以作为字符串被处理,因而可以压入vector<string>之中
     
    
    ;而反过来,vector<string>中的每一个元素仍为字符串,因此不能当做字符处理。
   
string temp1="7371";
char temp2[5]="7166";
S1.push_back(temp1);
S1.push_back(temp2);
//S1为 vector<string>型如上就是本贴的全部内容,如下是完整版的代码,因为很多代码都是做试验,看起来有些凌乱,大家自行根据注释阅读。
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char** argv) 
{
	
	vector<string> S1;
	vector<char> C1;
	for(int i=1;i<=7;i++)
	{
		string temp;
		cin>>temp;
		S1.push_back(temp);
		cout<<S1[i-1];
	}
	cout<<endl;
	for(int i=1;i<=7;i++)
	{
		char temp;
		cin>>temp;
		C1.push_back(temp);
		cout<<C1[i-1];
	}
	
	string temp1="7371";
	char temp2[5]="7166";
	//注:采用这种方式赋值,需要将内存多于字符串一位 
	char temp3='3'; 
	S1.push_back(temp1);
	S1.push_back(temp2);
	//string型的vector,可以将char类型的数组压入 
	//而采用单引号的char字符,则不能压入! 
	string temp4=S1[2];
	//注意:vector<string>型的每一位,仍然为字符串型,而不是char类型,此处temp4如果为char型会报错! 
	S1.push_back(temp4);
	//同理,此处如果为char型的vector,则无法压入! 
	
	string temp5;
	for(int i=0;i<=2;i++)
	{
		temp5[i]='*';
		 
		//注意:另一个很微妙的地方:
		//string的每一位为char型!但是如果是vector<string>型,每一位则为char!千万不要混淆
		temp5+=S1[i];
		temp5+="*";
		temp5+='*';
		//但如果是+运算符,起到的是字符串拼接的作用
		//因此虽然S1[i]是字符串型,temp5仍可以与字符串直运算 
		cout<<temp5[i];	
	} 
	char temp6[5]="7371";
	for(int i=1;i<=3;i++)
	{
//		temp6+='4';	
	//char型字符数组不能使用“+”操作符 
	} 
	
	
	return 0;
} 
