现在的位置: 首页 > 综合 > 正文

String类使用心得(希望大家有什么心得也回复出来,本人一并整理共享)

2013年03月22日 ⁄ 综合 ⁄ 共 2474字 ⁄ 字号 评论关闭

1.两个string类变量的比较

因为String是引用类型的,不是基本数据类型,所以它们的比较是使用地址和值(相当于C中的指针)来比较的,因为它们是不同的对象,有不同的地址,所以str1!=str2永远都是true。而str1==str2永远是false。如果你中想比较它们的数值是否相等就使用str1.equals(str2)。使用==或者!=是对象的比较,它们为真的条件是:不仅要求是同一对象,而值也要求相等。

  假设声明两个string类的变量:
 string str1="string test";
 string str2="string test";
  要判断两个变量是否相等,不能用==,以下方法错误:
 if(str1==str2)  //VS2005编译器下
  这里可能有人会想到比较两个变量的指针,但记住,分别指向两个变量的指针是不会相等的。即
 str1.c_str()==str2.c_str()
  表达式的结果为假,即便在此之前使用了"str2=str1"结果仍然如此。
  方法是使用string变量的compare方法。compare方法用来比较两个string类变量的存储内容。
 str1.compare(str2);
  当str1的内容大于str2的内容时返回一个正数,小于时返回一个负数,两者相等时结果为0。

【说明】
不同的编译器可能会有不同的方法定义,比如equals方法在VB、VC6.0、C#中可以使用,但C++中不支持,为了让程序的可移植性更好,建议大家使用compare。

  而要将一个string的值赋给另外一个string时,则可以使用"=",以下方法正确。
 string str1="string test";
 string str2=str1;
如果要将一个string变量的值赋给一个数组或char指针,可以使用copy方法。copy方法原型如下:
 size_type copy(
   value_type* _Ptr,
   size_type _Count,
   size_type _Off = 0
 ) const;
第一个参数指向拷贝完成后的目标字符串,第二个参数为拷贝的字符数,第三个参数表示从源字符串的第几个位置开始拷贝。使用示例如下:
int main( )
{
   using namespace std;
   string str1 ( "Hello World" );
   basic_string <char>::iterator str_Iter;
   char array1 [ 20 ] = { 0 };
   char array2 [ 10 ] = { 0 };
// basic_string<value_type>::pointer 表示一个指向string类中存储的数据类型value_type的指针
   basic_string <char>:: pointer array1Ptr = array1;    // 等价于char* array1Ptr
// basic_string<value_type>::value_type 表示string类中存储的数据的数据类型
   basic_string <char>:: value_type *array2Ptr = array2;   // 等价于char *array2Ptr

   cout << "The original string str1 is: ";
   for ( str_Iter = str1.begin( ); str_Iter != str1.end( ); str_Iter++ )
      cout << *str_Iter;
   cout << endl;

   basic_string <char>:: size_type nArray1;
   // Note: string::copy is deprecated, consider
   // using string::_Copy_s instead.
   nArray1 = str1.copy ( array1Ptr , 12 );       // 这里str1只有11个字符,nArray1的结果将为11
   cout << "The number of copied characters in array1 is: "
        << nArray1 << endl;       // nArray1的值为11
   cout << "The copied characters array1 is: " << array1 << endl;  // 输出为Hello World

   basic_string <char>:: size_type nArray2;
   // Note: string::copy is deprecated, consider
   // using string::_Copy_s instead.
   nArray2 = str1.copy ( array2Ptr , 5 , 6  );      // 这里从str1的第六个位置开始拷贝5个字符
   cout << "The number of copied characters in array2 is: "
           << nArray2 << endl;       // nArray2的值为5
   cout << "The copied characters array2 is: " << array2Ptr << endl;  // 输出为World
}

2.如何比较String变量中的部分是否相等?
我有四个String    
  "person1,chinese",  
  "persona12,british",  
  "persona113,american",  
  "person2224,chinese",  
  我想比较一下这四个string中,有几个人来自相同的国家。charAt和compareto在这里都不好用,因为每个String中第一个单词的字数都不一样。用什么办法可以把String中的每个单词给分开,然后在比较。

方法如下:

StringTokenizer st = new StringTokenizer("persona12,british", ",");  
println(st.nextToken());  
 

抱歉!评论已关闭.