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());