你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

总结字符串操作知识

[复制链接]
gaosmile 发布时间:2020-10-9 22:07

字符串操作看似简单,其实非常重要,不注意的话,经常出现代码运行结果和自己想要的不一致,甚至崩溃。本文总结了一些构建string对象方法、修改string对象的方法、string类型的操作函数、string类型的查找、string对象的比较。

1 构建string对象方法

首先,为了在我们的程序中使用string类型,我们必须包含头文件 。如下:

#include <string>

声明一个字符串变量很简单:

string Str;

这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。上面的声明没有传入参数,所以就直接使用了string的默认的构造函数,这个函数所作的就是把Str初始化为一个空字符串。

String类的构造函数和析构函数如下:

[td]
String类函数
说明
string s;生成一个空字符串s
string s(s2);拷贝构造函数 生成s2的复制品
string s("value");用字符串value初始化s
string s(b,e);以区间b,e内的字符作为字符串s的初值
string s(cp,n);取字符数组,前n个字符作初值
string s(s2,pos2);将字符串s2"始于位置pos2"部分当作字符串的初值
string s(s2,pos1,len);将字符串s2内"始于pos1且长度最多len"的部分作为字符串的初值
s.~string();销毁所有字符,释放内存

代码实例:

#include <iostream>
, @' [9 J' S' C/ o1 ~#include <string>3 _2 E# {* I# E" x5 O* b+ r& A3 p

' i+ m, F3 e- V: a# F% F" r; p& {using namespace std;
9 r4 Y# g  V1 _: a' T: I. P//20200527  测试字符串操作  C语言与CPP编程* D' b# l2 E1 t: g, X& J
3 b0 ~& O. R  R+ w
int main()
2 r. D) r) L# D/ l& v8 b{
3 z, h2 e1 Z5 M7 L0 b1 ]" i' |/ V  string s1;
# `/ P/ _) _. B! b7 f' s) b  cout <<s1 << endl;  //没有赋值输出为空; y( r" p" I  i1 I! `/ Q

: f. }8 m# D( N, z9 ^, M  string s2(10,'f');
: w! E/ Q& G/ L9 D& T  cout <<s2 << endl;  //用10个f定义字符串s2,输出ffffffffff
& R" P- U6 E! i2 _$ h7 ?4 S6 G
* I9 l. q5 w8 O& c$ F; p- V- m  string s3(s2);9 Y) G  }, ?1 Y, {" v# M/ {* t- A
  cout <<s3 << endl;  //用s2定义上,将s3拷贝给s2,s2和s3是不同的字符串,
* C- j8 Z2 x# Y  //只是构造的时候拷贝s2,修改其中一个不会影响另一个,s3输出位ffffffffff
, {4 W0 O5 Q  o% Z  ?4 M7 P0 t0 X, b
  string s4(s3.begin(),s3.begin()+(s3.size())/2); //定义s4用迭代器做参数,从第一个迭代器s3.begin()
) o5 l9 X5 b& [! D* K" I# I9 k1 Y/ A  cout <<s4 << endl;    //到第二个迭代器s3的一半即s3.size()/2结束,s3有10个f,s4输出为fffff! X. @8 N: Q4 {: C
' N& z! y3 J: i& D  q
  char *cp = "Hello";            //最后有空字符/05 z9 h" q- T" I$ `# G
    char c_array[] = "world!!!!";  //最后有空字符/07 c$ p1 ]. ?; m2 B/ k8 K1 _
  char no_null[] = {'H','e','l','l','0'};    //最后没有空字符/0,不算C语言字符串,只是字符数组
- w5 x4 V) I' Z8 d. q+ [7 z' G! ?0 _3 v7 a
  string ss1(cp);
1 h0 C! i' \" ]4 v6 o. |+ a  cout <<ss1 << endl;  //cp指向的字符串一个一个拷贝到ss1对象里,ssl输出为Hello0 G: A" ]5 S+ t7 f: @- F1 D
- H0 T% m, M8 m! U: Z
  string ss2(c_array,5);7 Z0 p! m! A7 V( t8 |
  cout <<ss2 << endl;  //c_array数组名就是指向第一个字符w的指针,从w开始取5个,ss2为world
6 |# Z) V6 |( H8 o. f+ o! ^# |
' h$ G5 J- F8 `+ o5 Q  string ss3(c_array+5,4);
; D3 V8 k" ~; S- V  cout <<ss3 << endl;  //c_array+5指向第五个字符d,再取4个字符,ss3为!!!!+ W7 x4 |2 u1 l

8 k$ _" P* x" K8 g  //string ss4(no_null);//用字符数组为ss4赋值,因为找不到/0,不知道拷贝几个会出错
6 B3 P8 Y6 ?% t  y9 Q! u  string ss5(no_null,2); //这次取2个就知道什么时候结束,不会出错8 v( m' Y6 N9 ?3 B0 c4 q5 o) F
  cout <<ss5 << endl;    //ss5为He4 w; ^$ }5 O1 z

. g) |& Q: y4 R+ u( b0 H, D) A  s1 = "Hello";
: V2 l0 x) ], b' j+ B8 }* @9 Z7 U  cout << s1 << endl;  //s1输出Hello
" ?  o2 a; Z9 Z% M1 T1 _. R! M: i; w( F! F( y
  string s6(s1,2);
( S& ^6 h' d3 p2 K% k; Q  cout << s6 << endl;  //用s1初始化s6,2表示字符下标,从第二个字符开始到最后,s6为llo/ h( n' S$ l9 r. s1 J; ^% D! G$ m) e

$ Q7 a' T& ~+ O9 k8 R, ?6 H  string s7(s1,0,2);
4 o! m- @; O& ~+ Z9 }  cout << s7 << endl;  //从s10开始取2个,s7为He6 L+ V3 Z% i2 K; K6 {. \3 l

3 z' q$ y8 {, y/ Y% F' |0 a  string s8(s1,0,8);
3 F) }1 M3 u  S4 {; C0 c2 o4 O  cout << s8 << endl;  //从s1的第一个开始取8个,不够8个就结束,s8为Hello7 z7 ]  d* i+ r( d6 E7 J
- L$ A( E# Y4 e" @7 d
  return 0;
+ i( B0 f/ h; ^. `8 |- ?}
! F5 M+ N6 W/ L% K/ O, n/ E

** 运行结果**:

微信图片_20201009215105.jpg

2 修改string对象的方法

与容器共有的 string 操作:

[td]
与容器共有的 string 操作方法
说明
s.insert(p,t);在迭代器 p 指向的元素之前插入一个值为 t 的新元素,返回指向新插入元素的迭代器
s.insert(p,n,t);在迭代器 p 指向的元素之前插入 n 个值为 t 的新元素
s.insert(p,b,e);在迭代器 p 指向的元素之前插入迭代器 b 和 e 标记范围内所有的元素。返回 void
s.assign(b,e);在迭代器 b 和 e 标记范围内的元素替换 s。string类型,返回 s;容器类型返回 void
s.assign(n,t);用值为 t 的 n 个副本替换 s。对于 string 类型,该操作返回 s;对于容器类型,则返回 void
s.erase(p);删除迭代器 p 指向的元素。返回一个迭代器,指向被 删除元素后面的元素
s.erase(b,e);删除迭代器 b 和 e 标记范围内所有的元素。返回一个迭代器,指向被删除元素段后面的第一个元素

代码实例:

#include <iostream>! g0 e$ r! k* p5 \- V
#include <string>; [- F# _" B; T/ r: [1 u4 Z

! M, \; W( q6 s3 xusing namespace std;' Z2 k3 Z! N7 K
//2020.05.27 测试字符串操作  公众号:C语言与CPP编程
2 }+ U+ _# x) k! d$ v0 `0 j
' m, F- d# i' s, z5 hint main()* g$ B  {; \. b3 l6 }
{$ }. V8 N8 c! X. f
  string s("hello");
/ V# j: ?# T! q8 H) e2 z  string s2("abcdef");
; Q- N+ I& \+ H* V3 B/ N8 ~6 e% ]' a- z3 H
  string::iterator  p =  s.begin();  //迭代器p
+ j5 |9 A' h' j* _& E; r2 q
7 o1 p# x) l. |  s.insert(p,'A');   //在迭代器p指向的s开始之前插入A
( s; E0 @, [  a2 R  cout << s << endl;   //s为Ahello' h  O/ s  J& L! `/ m
- k( M6 @7 [, T: Z1 m! k
  s.insert(p,3,'B');  //p指向返回的Ahello的A处,在A之前插入3个B; \4 J+ T7 `; n
  cout << s << endl;   //s为BBBAhello' J4 o2 k# f( x0 o) @+ ^, z
& I# A& F9 j9 S1 E
  string::iterator  b =  s2.begin();  //迭代器b
' l& M5 L) P+ l' K; K) b6 O) L+ l8 E  string::iterator  e =  s2.end();  //迭代器e( l3 N. h4 x& R: L

+ L. ?  P" e* D  s4 }  //p = s.begin();       //p指向s
) F$ s$ E: b/ `0 m7 M, b  s.insert(p,b,e);     //在p指向的s之前插入b和e迭代器范围内的元素abcdef
  H% b7 Z$ \, Z4 Q( n# R$ X  cout << s << endl;   //s为abcdefBBBAhello
/ I" R% g' T9 r, V7 D7 w+ |" O/ e- R% S5 m; l
  s = "hello";" D* n  z* q$ p7 G$ b) m
  cout << s << endl;   //s为hello
: p) U. a( H8 v* Z
" T$ F4 B4 w' _& p$ ~- a" F$ |( J& ?0 q  s.assign(b,e);      //s所有的元素倍替换为b到e之间的元素,b与e之间为s2! R0 V6 B5 t7 E$ U+ Z+ M/ A
  cout << s << endl;   //s为abcdef7 y4 U& ^5 R2 ?5 X

  D3 c9 l1 U$ r+ t' e5 t  s.assign(8,'K');
) a( Q4 H* }7 \$ A1 ]  cout << s << endl;   //s为KKKKKKKK3 Z7 ^; ^7 Q/ ?
+ A. U+ }3 O: y3 _! ?& W
  p = s2.begin();     //迭代器p指向s2的a
( G1 ^0 `9 w$ o) L: k  s2.erase(p);         //删除迭代器p指向的元素a
* _7 `3 ~0 p* \3 G9 I& U: i: F  cout << s2 << endl;  //s2为bcdef7 I; R2 ?& \- a7 W/ b- V, {5 d

; k' P$ \# p! h1 ^) H* d  p = s2.begin();     //a被删除,p指向b
# Y( u: D' n; w- T9 S+ T5 W  p++;                //指向c0 o8 M6 F3 s$ z& g: g7 b
  p++;                //指向d
/ C9 |/ U! x: ~$ g' d5 s: f  string::iterator p2 = s2.end(); //p2迭代器指向f
- }; A! M! C$ ]  d& T  p2--;                            //指向e
0 ?; E3 K$ o- D1 C3 L  s2.erase(p,p2);                  //删除p指向的d和p2指向的e之间的元素
6 i8 c7 Q: B3 v4 _! S& x! k) d  cout << s2 << endl;              //s2为bcf3 |# H: F% a: i6 n5 ?6 `. h9 g& v
+ `5 L: }5 h( k# L3 x0 P0 x: f
  return 0;1 @* n3 n. [. v& E! o
}
3 G/ J8 s! t6 q& [

运行结果:

微信图片_20201009215109.png 运行结果

string 类型特有的版本:

string以数组的形式存储,可以用数组的下标进行修改操作:

[td]
string 修改操作方法
说明
s.insert(pos,n,c);在下标 pos 的元素之前插入 n 个字符 c
s.insert(pos,s2);在下标 pos 的元素之前插入 string 对象 s2
s.insert(pos,s2,pos2,len);在下标为 pos 的元素之前插入 s2 中从下标   pos2 开始的 len 个字符
s.insert(pos,cp,len);在下标为 pos 打元素之前插入 cp 所指向数组的前len 个字符
s.insert(pos,cp);在下标为 pos 的元素之前插入 cp 所指向的以空字符结束的字符串副本
s.assign(s2);用 s2 的副本替换 s
s.assign(s2,pos2,len);用 s2 中从下标 pos2 开始的 len 个字符替换 s
s.assign(cp,len);用 cp 所指向数组的前 len 个字符副本替换 s
s.assign(cp);用 cp 所指向的以空字符结束的字符串替换 s
s.erase(pos,len);删除从下标 pos 开始的 len 个字符

代码实例:

#include <iostream>2 j+ J$ B9 q9 H
#include <string>3 i* i$ U; d/ W
$ u% ?3 g3 L; |" Q: U( T: G* j
using namespace std;! p+ y% j+ H2 ]; J0 n& o
//2020.05。27 测试字符串操作  公众号:C语言与CPP编程
' q/ C* h  b. d% P" ?) J
  d$ O. i* y. d: x9 Tint main()
9 Y4 F, s2 I+ U3 |  m: Z{; `  c0 b- \+ K8 G  Y' ]
  string s("hello");
) i8 d9 Z8 j6 V/ N  L  string s2("abc");& F( O: a- P2 d1 E4 z

" F" s( q% @; _/ f( t  s.insert(0,3,'A');   //在s下标是0之前插入3个A
. K$ U; J& ~% X3 b# N; S  cout << s << endl;   //s为AAAhello
* N/ B# Q6 E) @- n: V; s* j
9 k$ t9 [5 w9 k  s.insert(5,s2);      //在AAAhello下标是5的元素之前插入abc- T' ?# R0 C6 p
  cout << s << endl;   //s为AAAheabcllo
/ k# Y! V: A* I" S# l0 ^3 ^) ~
. p7 \( z7 h+ f  s2 = "123456";3 o5 v  [: \  v; p) p- S# J
  s.insert(0,s2,2,3);   //在s的下标是0之前插入s2下标为2开始往后的3个元素345" D; h6 z( Q& M% }: r
  cout << s << endl;   //s为345AAAheabcllo
+ {* b- }; m: I' N+ \# a9 J* p# V1 ~4 R& F3 D  C* [2 E) ]9 {/ c
  char *cp = "Stately plup Buck";  v# b9 R! J. Z' h: c4 a3 j
  s.assign (cp,7);
  u1 x+ {5 y0 r, g9 @: C5 W  cout << s << endl;   //s为Stately* s: J( `0 _2 I0 j4 ^

: ~% @/ }2 i7 h( e+ G+ X6 a  s.assign(cp);         //没有长度,默认是拷贝全部, V: Y7 M* k$ O
  cout << s << endl;   //s为Stately plup Buck+ n% R: E3 T5 G

% W" q# j; |) `  J4 F2 U( l' f/ K  s = "hello";
, `1 ?; f% }6 H! w9 X/ B  s.insert (0,cp,7);
, j1 C7 o$ G+ _" L0 L$ v  cout << s <<endl;   //s为Statelyhello! l( d/ \2 A* W$ E% r' O9 h
$ o+ C- y: u( a7 R3 N- Q5 |
  s.insert(0,cp);
$ O4 A$ U  f$ x3 g) Z& m4 f  n  cout << s <<endl;   //s为Statelyhello2 B! \2 Q  k2 x+ _4 Z
1 U1 b! ?0 P9 i; f4 \
  s = "hello";
% N$ F% R9 l, N% B  s2 = "abcdef";
7 {2 x/ n! o- A. C) y1 G0 N6 _2 v$ @* \- q  g6 P7 i% E& n3 G7 F
  s.assign(s2,2,3);    //s2中下标为2开始3个元素赋值给s;
5 l1 V- c) Q# m  cout << s <<endl;   //s为cde1 {/ J! I( o  H0 ^
% D7 N! ^8 N9 E$ o. B) y
  s.assign(s2);
( i# K. C! L/ c( ]/ B  cout << s <<endl;   //s为abcdef* i, Q3 q7 `9 Z$ M7 {2 {% d
8 Q7 ~, Y  A  |! b9 g" L
  s.erase (2,3);      //从下标为2开始删除s中的3个元素' a# d0 u: b1 s5 j; l' z: F# R. B; t3 I
  cout << s <<endl;   //s为abf
% g$ N2 r5 q' \. A9 ?7 O) E! B1 C9 g0 y5 J) v: _
  s = "123456789";* c8 G* N& E3 q
  s.erase(s.size()-5,5); //删除s中后5个4 e5 K. ]' {8 e6 Y
  cout << s <<endl;   //s为1234! i% h* v# r2 {; Z6 b, I
5 N3 b+ f# X; G% I
  s.insert(s.size(),5,'!'); //在s下标为s.size()处,插入5个!0 ]. v. K; [0 ]$ @4 S
  cout << s <<endl;   //s为1234!!!!!+ q. Z# x2 {) g& q& b

* O2 ]3 N# _" P  s = "abc";
  Q1 Q' g$ O, f; \! z# Q  s.erase(0,1).insert(0,"A");  //先从下标为0之前删除一个a为bc,再插入A
) ?. @% q0 K. T3 L( y5 b+ j7 }+ R  cout << s <<endl;   //s为Abc, r7 S8 w2 A: G6 y* j# h% q

/ l& f8 U) v% o" i9 w1 m  s = "abc";; {4 D% g) m  D; X
  s[0] = 'A';      //用数组的方式处理7 i) X- E+ w5 ~9 o8 a
  cout << s <<endl;   //s为Abc- k& M& H. S/ p; |1 d/ P
; u+ W% R( f* h/ @& H) r% o8 B- F
  return 0;
% t6 d, H/ \4 L' e}8 @. _/ |* D8 B3 O$ L

运行结果:

微信图片_20201009215113.png 运行结果! p" ]2 x; }. A8 t, A
, l! \8 D) u4 @0 r1 G+ Z

; g, o" {$ e+ _5 k3 适合string类型操作的函数
  • substr()主要功能是复制子字符串,要求从指定位置开始,并具有指定的长度。
  • append() 方法在被选元素的结尾(仍然在内部)插入指定内容。提示:如需在被选元素的开头插入内容,请使用prepend()方法。
  • replace() 该函数返回一个字符串,其中指定的字符串已经被替换为另一字符串,并且替换的次数也可以指定。
    + W1 U! r  q9 S) |& Y4 ], y

代码实例:

#include <iostream>0 M* n4 [! ?$ C8 q" P
#include <string>  q( T. k1 Z4 @8 Q! \  s

$ [, J$ G: X  d( R  B9 D- gusing namespace std;- _" q3 `5 G4 K4 u" o
//2020.05.27 测试字符串操作  公众号:C语言与CPP编程3 M! u: V' t& }! Z
2 T2 I/ }0 G$ u# A' {
int main()7 E4 F) U: e0 s- F$ X/ P( l
{
+ G9 H0 ~6 k/ r  string s("Hello world");
! |/ x2 g3 E! ]0 {4 X  string s2 = s.substr(6,5);  //从第6个开始取5个5 ]( C9 l6 {2 A) l* V/ |- p5 c
  cout << s2 << endl ;        //s2为world
4 b' P$ i  p) f  d2 k- e: t
& l5 W. ^$ R3 }6 W! f" }8 d" v  s2 = s.substr(6);  //从第6个开始取拷贝所有的
# L8 ?) C1 Q( z9 q" S$ W  cout << s2 << endl ;        //s2为world) ^- H0 K* n- l( A9 @
6 ?" x. ^4 f7 f1 L1 U
  s2 = s.substr(6);    //s2拷贝s的全部,相当于s2=s
# t, I$ M7 X" g8 e1 q" d  cout << s2 << endl ;  //s2为Hello world
& Q/ c9 w1 t# V1 V% `) z$ _8 f+ `. t0 B  T; ~6 t
  s = "C++ Primer";: ]* k+ x$ @4 }% V! W; U
  s.append(" 3rd Ed");   //再s最后添加3rd Ed
% G7 f  o$ @6 e9 K$ \6 p2 b2 K  cout << s<< endl ;  //s为C++ Primer 3rd Ed% e. w! ]1 @  }( a  b* \$ X
# g' u& }8 ~' G/ I1 K6 v
  s = "C++ Primer";
( H# n/ s; m# ~! {1 `0 Y  s.insert(s.size()," 3rd Ed"); //最后插入
8 T8 B1 C) g" A+ ]  cout << s<< endl ;  //s为C++ Primer 3rd Ed
( R/ B, s# V6 }( y9 f  b/ U, L# B, A# R6 e4 p8 _
  s.replace(11,3,"4th");       //下标11开始3个替换4th
3 {$ z3 k, ?* ?    cout << s<< endl ;  //s为C++ Primer 4th Ed4 m  G2 ?! N9 y. m* t

/ Y7 D3 T) ^* \, v' r  s.replace(11,3,"Fourth");       //下标11开始3个替换Fourth
/ U3 I3 q& ?2 L! D; v& \- e6 [    cout << s<< endl ;        //s为C++ Primer Fourth Ed
9 C5 F3 U, L" ?) T: I& D* o& d- E, N5 l6 @& C
  s = "C++ Primer 3rd Ed";    //replace相当于先删除后插入; i$ F* `6 U* _! q4 G7 w5 h
  s.erase (11,3);            //删除3rd( e2 ~" D% T4 V. U2 E
  s.insert(11,"Fourth");      //插入Fourth2 ~+ z; p5 L% ^! P
  cout << s<< endl ;     //s为C++ Primer Fourth Ed3 r. f! I; }& ~0 A* V0 T
  J( X2 M# ^3 o* y
  return 0;- a# C! ~: M, A# T
}
( O; M) C- [5 g& I. S* ~! H$ R  @

运行结果:

微信图片_20201009215116.png 运行结果
% o# p6 u2 ?* K9 X5 i
: }( H  z* u/ I& i+ L
* G# _/ ?5 U! c# e& I6 h! k; w$ b# I
4 string类型的查找[td]
查找函数
说明
s.find( args);在 s 中查找 args 的第一次出现
s.rfind( args);在 s 中查找 args 的最后一次出现
s.find_first_of( args);在 s 中查找 args 的任意字符的第一次出现
s.find_last_of( args) ;在 s 中查找 args 的任意字符的最后一次出现
s.find_first_not_of( args);在 s 中查找第一个不属于 args 的字符
s.find_last_not_of( args);在 s 中查找最后一个不属于 args 的字符

代码实例:

#include <iostream>+ N. K$ z$ _( z* b* Y
#include <string>
9 R. W( c& a* Q. t6 Y! g3 @6 R. t' Y3 _% N
using namespace std;0 @# F" @) `3 H  R$ D' R1 Q
//2020.05.27 测试字符串操作  公众号:C语言与CPP编程
) T" ]9 `' A6 t3 _4 S' t" ]! Q4 C) j# K# b
int main()- |: @% b4 F$ w. j; M0 ~  Z  m
{
4 P. a9 F& o% ~: E  string name("AnnaBelle");
0 |; Q% m2 n8 M% h7 ^& u  string::size_type pos1 = name.find("Bell");
0 Z+ C# S- r! |1 j+ z  cout << pos1 << endl;     //返回下标4,如果没找到返回npos$ G' l. {3 e# [& k1 l8 s
! K/ `# V7 q9 J; f  `/ Y
  if(pos1 == string::npos)
. r6 Z8 m/ f5 b3 V4 o2 m     cout << "没找到!" << endl;) g" k% _1 l! ^. [  Z
  else# O( W: S7 w+ z9 o. m- U5 d& F4 _) Z
     cout << "找到了!下标:" << pos1 <<endl;  H( T8 \- E5 b; S' k: B

+ ?; k: r8 ?+ X% I0 P- c  name = "2sn3";
* ^' p7 A1 {7 ?) s4 [/ J  string numerics("0123456789");  n/ V3 t0 e9 u
  string::size_type pos = name.find_first_of(numerics);  //在2sn3中查找0123456789中任意一个第一次出现
: j8 V  Q0 R- @  J( J  if(pos == string::npos)* W: L5 o: _2 R; z' ]
     cout << "没找到!" << endl;9 D! M0 Q: d3 n7 J( U1 y" a
  else, X( w2 \3 q6 ?& R/ g3 B: }7 g4 M
     cout << "找到了!下标:" << pos <<endl;       //找到了!下标:0
" M1 k/ |" b  j+ ?) E
" T& s/ j6 E7 {% N: h* t  //其他类型的查找这里就不举例子了( N6 o7 @7 W% h4 J
: R; L3 ^5 H* `+ U8 m
  return 0;
) D; k* q. a( Z) ~) ?: }6 N% t}/ x# J: W; {* O5 D/ ?: i5 x

运行结果:

微信图片_20201009215120.png 运行结果
1 x4 \1 c, a0 l6 p  V7 s( o- @) [, C, |& Q0 p/ w0 B/ l% d, t4 m- e" t
: Q4 q' |# ^, G  {/ Z
5 string对象的比较[td]
string对象比较函数compare用法
说明
str1.compare(str2);如果相等则输出为0,str1>str2输出大于0,否则,输出小于0
str1.compare(m,n,str2);str1的子串(从索引m开始,包含n个字符)与str2进行比较
str1.compare(m,n,str2,m,n);str1的子串(从索引m开始,包含n个字符)与str2的子串(从索引m开始,包含n个字符)进行比较

代码实例:

2 J# C+ D# y, b8 \; q
#include <iostream>
3 K) |/ V( R4 P# C) o! p$ Y* p#include <string>
0 W% ^  T0 p, m& w- u; n/ [#include <cctype>
: ]) P# R$ K  n- Nusing std::cout;
+ b$ m4 O* Q. v: W3 u3 s4 c* zusing std::endl;+ y4 r( ?& b6 w
using std::cin;
- q/ Z5 R$ a# w, dusing std::string;
# A/ A$ v2 f5 }$ Gint main(void)
) R2 i( ~  E0 J5 R{
+ a% q' Y( {1 _5 n" Y  string str1="hi,test,hello";" r: P9 w& q4 H8 f1 [6 O* h
  string str2="hi,test";
. N$ d9 Q- a# K; P/ T+ w+ K  //字符串比较) n: j5 h# b$ P6 G0 {
  if(str1.compare(str2)>0)2 b) y0 j4 ]( i
    printf("str1>str2\n");. e+ @7 ~" T- Q
  else if(str1.compare(str2)<0); `+ G5 e! n" s2 d6 h
    printf("str1<str2\n");2 K) M/ r) q( H1 R6 |9 |0 [
  else
4 R$ m* c8 q, t* _    printf("str1==str2\n");
8 j# F$ [( I; k. H/ V
7 s' |$ i6 h8 h* W+ Z" p! u  //str1的子串(从索引3开始,包含4个字符)与str2进行比较( k7 T% U/ T" ]
  if(str1.compare(3,4,str2)==0)) z3 ^  Z5 V, [" t
    printf("str1的指定子串等于str2\n");
& _& I3 U: ?3 [( Z" d8 G6 a  else+ C: U0 e$ z6 S  O; O: V8 {
    printf("str1的指定子串不等于str2\n");
' W8 V7 P" c! L+ _' |' b
! I9 y0 B, s1 v( U  //str1指定子串与str2的指定子串进行比较; E- t) h% O2 w# Y+ E$ F
  if(str1.compare(3,4,str2,3,4)==0)" x$ p6 F, ^7 X9 i; N7 A
    printf("str1的指定子串等于str2的指定子串\n");
% Y! _' z" T4 B( ~; L  else, Q# ]* i$ h5 k' m
    printf("str1的指定子串不等于str2的指定子串\n");
9 R4 ]% u' d9 L: V+ A8 Z3 ^4 Z& K& k6 g. |+ a3 ^( ?
  //str1指定子串与字符串的前n个字符进行比较: v4 t2 k. ]5 h6 i  V
  if(str1.compare(0,2,"hi,hello",2)==0)
0 r: E% x+ V- R" J( x5 [5 n    printf("str1的指定子串等于指定字符串的前2个字符组成的子串\n");8 D8 ^9 R* C- F7 r# E/ Z, F
  else
; f3 B. [4 J+ a7 z. v/ f5 G    printf("str1的指定子串不等于指定字符串的前2个字符组成的子串\n");
2 h* p. u$ \' X  return 0;
6 E+ t; X3 ^, }5 K) m' `0 {* q& X/ ~( ?3 V
}3 O5 b' r: s* Z1 O; b1 y: t

运行结果:

微信图片_20201009215123.png
6 T: _1 j+ r4 ]3 c) v4 ~) v& v- z- f/ p运行结果
. x2 Z6 Q3 J- s7 E8 Z( q! m# H: S/ \7 c
赞 收藏 评论0 发布时间:2020-10-9 22:07

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版