String类使用心得(希望大家有什么心得也回复出来,本人一并整理共享)
来源:互联网 发布:人人商城v3小程序源码 编辑:程序博客网 时间:2024/05/19 23:13
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());
- String类使用心得(希望大家有什么心得也回复出来,本人一并整理共享)
- git的使用心得,希望对大家都有用,有什么疑问尽管留言
- 希望有大侠能将UBB编辑器的使用心得和大家分享一下
- String类使用心得
- pickerView使用心得,有不对的大家指正
- 五十道编程小题目,大家有时间也做做啊,一起交流算法与心得
- 五十道编程小题目,大家有时间也做做啊,一起交流算法与心得
- mysql使用心得整理
- 请教各位:用户自定义网页界面设计大家有什么想法和心得吗?
- 分享公积金按揭心得,希望能给大家一些帮助!
- CVS使用心得(整理中)
- PHP面试题汇总(希望有高人能全部解答出来发到本人邮箱white-lx@163.com谢谢)
- 写逻辑层的具体思路,希望可以帮助大家!也希望大家踊跃讨论回复交流!
- 心得(错误整理)
- string 类 一点点心得
- String spilt的使用心得
- C++ string 使用心得详解
- 一些创业的心得,希望对其他创业者有帮助
- Struts2页面中访问Servlet/JSP作用域对象
- Sandcastle入门:创建C#帮助文档
- 带CheckBox,RadioButton的网页树控件—EXTree
- Unrecognized option or flag, -sourcerootforupload
- php实现文件下载的一段代码
- String类使用心得(希望大家有什么心得也回复出来,本人一并整理共享)
- [研究报告]侯总迅速蹿红现象研究报告
- 为什么无法面向对象
- 词典存储结构分析
- 郁闷资源得不到有效的积累
- select Columns,Tables
- shell内部变量和全局变量
- Shell函数执行结果和退出状态
- 垃圾邮件防火墙推荐使用的DNS