Crstiano字符串string和char总结

一、字符串的输入输出的方法
1.字符串数组+初始化

char s1[]="array";  //字符数组
char s2[6]="array";  //数组长度=字符串长度+1,因为字符串末尾会自动添‘\0‘
string s3 = "array";
printf("%s,%c\n",s1,s2[2]);  //array,r
cout<<s3;

2.字符串指针+初始化

char *sp="pointer";  //字符指针
printf("%s,%c,%c\n",sp,*sp,*(sp+2));  //pointer,p,i

3.数组+scanf/cin

char s1[6];	
scanf("%s\n",s1);
cin>>s1;
printf("%s,%c\n",s1,s1[2]);  //array,r

4.指针+scanf

  char *sp;
  sp=(char *)malloc(sizeof(char));
  scanf("%s\n",sp);
  printf("%s,%c\n",sp,*sp);//pointer,p

5.指针+数组+scanf

char str[60], *sp=str;//将数组的首地址str赋给指针变量sp
scanf("%s\n",sp);
printf("%s,%c,%c\n",sp,*sp,*(sp+3));//pointer,p,n
printf("%s,%c,%c\n",str,str[0],str[3]);//pointer,p,n

7.用scanf和gets( 字符数组名或指针)进行输入的区别:

char str1[60],str2[60];
gets(str1);  //gets()函数将接收输入的整个字符串直到遇到换行为止
printf("%s\n",str1);
scanf("%s\n",str2);//scanf如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理
printf("%s\n",str2);

二、char 和 string 的区别
1、赋值操作

char赋值:
 char ch1[] = "give me";
 char ch2[] = "a cup";
 strcpy(ch1,ch2);
 cout<<"ch1="<<ch1<<endl;
	输出结果:ch1=a cup
string赋值:
 string str1 = "give me";
  string str2 = "a cup";
  str1 = str2;
     cout<<"str1="<<str1<<endl;

2、合并

char合并(全部)
	char ch1[15] = "give me "; // 注意长度,合并后为13
  char ch2[] = "a cup";
  strcat(ch1,ch2);
  cout<<"ch1="<<ch1<<endl;
	输出结果:ch1=give me a cup
string合并(全部)
	string str1 = "give me ";
  string str2 = "a cup";
  str1 = str1 + str2;
  cout<<"str1="<<str1<<endl;
	输出结果:str1=give me a cup

char合并(部分):
  char ch1[10] = "ab";  // 注意合并后的长度
  char ch2[] = "abc";
  strncat(ch1,ch2,3);    // 参数3为从起始位置起的字符数
  cout<<"ch1="<<ch1<<endl;
	输出结果:ch1=ababc
string合并(部分):
  string str1 = "ab";
  string str2 = "cdefg";
  str1.append(str2,2,3); // 参数2为数组下标,参数3为参数2后字符数。即将str2从下标为2位置起3个字符合并到str1
  cout<<"str1="<<str1<<endl;
  输出结果:str1=abefg  

3、测长

char测长:
 	char ch1[] = "give me";
  int m = strlen(ch1);  //不包括‘\0’
  cout<<"m="<<m<<endl;
	输出结果:m=7
string测长:
  string str1 = "give me";
  ①int m = strlen(str1.c_str());
     cout<<"m="<<m<<endl;
  ②int n = str1.size();
     cout<<"n="<<n<<endl;
  ③int k = str1.length();
     cout<<"k="<<k<<endl;
	输出结果:m=7
  	    n=7
   		  k=7

4.替换

char替换:
	char ch1[10] = "ab";
  char ch2[] = "cdefg";
  strncpy(ch1,ch2,3);       // 拷贝ch2起始位置后3个字符赋给ch1
  cout<<"ch1="<<ch1<<endl;
	输出结果:ch1=cde
string替换:
 	string str1 = "ab";
  string str2 = "cdefgh";
  str1.replace(0,1,str2,4,2);  // 将str2从下标4开始2个字符替换掉str1中从起始位置开始1个字符
                // replace函数可重载,有多种形式,也支持Char型字符替换
  cout<<"str1="<<str1<<endl;
	输出结果:str1=ghb

5.拷贝

char拷贝:
	char ch1[10] = "abc";
  char ch2[] = "de";
  memmove(ch1,ch2,2); //将ch2从起始位置起两个字符赋给ch1
  cout<<"ch1="<<ch1<<endl;
  输出结果:ch1=dec
string拷贝:
	string str1 = "abc";
  char ch2[10] = "defg";
  str1.copy(ch2,10,1);    // copy函数的第一个参数只能为char类型
               // 将str1从下标1位置开始的10个字符赋给ch2
  cout<<"ch2="<<ch2<<endl;
输出结果:ch2=bcfg

6、插入

	string str1 = "1278";
  string str2 = "3456";
  str1.insert(2,str2,0,4);   // 在str1下标为2的位置插入str2起始位置后4个字符
  cout<<"str1="<<str1<<endl;
	输出结果:str1=12345678

7.删除

	string str("give me");
  str.erase(2,2); // 删除从下标为2位置起两个字符
  cout<<"str="<<str<<endl;
  str.erase(2);  // 删除下标为2位置后全部字符
  cout<<"str="<<str<<endl;
  str.erase();    // 删除所有字符
  cout<<"str="<<str<<endl;
	输出结果:str=gi me
  	   str=gi
    		 str=

8.查找

string str("Hello worldw");
  int m = str.find('w',0);   // 从str起始位置开始查找w字符
  cout<<"m="<<m<<endl;
  int n = str.find_first_not_of('w',0);  // 查找str起始位置开始不是w的字符
  cout<<"n="<<n<<endl;
  int k = str.find_first_of('w',0);  // 从str起始位置开始查找第一个w字符
  cout<<"k="<<k<<endl;
  int l = str.find_last_of('w');   // 查找最后一个w的位置
  cout<<"l="<<l<<endl;
  int p = str.find_last_not_of('w');  // 查找最后一个不是w的字符的位置
  cout<<"p="<<p<<endl;
  int q = str.rfind('w'); // 反向查找
  cout<<"q="<<q<<endl;
	输出结果:m=6
  	   n=0
    		 k=6
    	 	  l=11
     	  p=10
          q=11

9.比较

	string str1 = "155";
  string str2 = "52";
  char c[] = "34";
  char c2[]= "56";
  int z = strncat(c,c1);//用来比较两个char数组是否相等
   int i = str1.compare(str2);
  cout<<"i="<<i<<endl;  // 输出i=-1
  int j = str2.compare(c); // string字符串可以与char字符比较
  cout<<"j="<<j<<endl; // 输出j=1
  int l = str1.compare(0,2,str2); // 比较前两个字符
  cout<<"l="<<l<<endl; // 输出l=-1;
  int k = str1.compare(1,1,str2,0,1); // str1下标为1位置字符与str2下标为0位置字符比较
  cout<<"k="<<k<<endl; // 输出k=0
  int m = str1.compare(1,1,c,0,1);
  cout<<"m="<<m<<endl;// 输出m=1
  int n = str1.compare(1,1,c,1);
  cout<<"n="<<n<<endl; // 输出n=1

10.判空

	string str = "";
  if(str.empty())

11.转换(string转字符数组)

string str1 = "Hello World";
  const char* ch1;
  ch1 = str1.c_str();

12.交换

char交换:
	char ch1[15] = "ofru";
  char ch2[15] = "";
  swab(ch1,ch2,strlen(ch1));  // 将ch1奇偶对调后传入ch2
  cout<<"ch2="<<ch2<<endl;
	输出结果:ch2=four
string交换:
  string str1 = "four";
  string str2 = "";
  str1.swap(str2);
  cout<<"str2="<<str2<<endl;
	输出结果:str2=four

三、字符串的比较方式

猜你喜欢

转载自blog.csdn.net/Cristiano_san/article/details/109297616