leetcode.cn165
最近刷leetcode.cn,碰到这题。
题目很水,没啥说的,主要是写法的问题。因为leetcode.cn蛋疼的输入输出通过参数给出,不方便用cin。
以前遇到这种题我一般会用java,写法很简单,split成字符串数组再比较就ok。用C/C++的话,因为C/C++标准库没有字符串split函数,得手写(或者用strtok,但是也没split方便),稍麻烦点。于是这次我详细查了下资料,发现C++标准库有个sstream头文件,里面有个istringstream工具,用string构造,用起来跟cin几乎一模一样。代码如下:
1 class Solution { 2 public: 3 int compareVersion(string version1, string version2) { 4 istringstream ver1(version1), ver2(version2); 5 int n1, n2; 6 char c; 7 while (bool(ver1 >> n1) + bool(ver2 >> n2)) { // 不用||而是转为bool再相加是为了避免第一个读取成功导致另一个不执行 8 if (n1 != n2) { 9 return n1 > n2 ? 1 : -1; 10 } 11 ver1 >> c; 12 ver2 >> c; 13 n1 = n2 = 0; // 提前置0以备读取失败时用 14 } 15 return 0; 16 } 17 };
另外值得一提的是关于逻辑或运算符那里,我也是值细想了一下才写出来这么简洁的。