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 };

 

另外值得一提的是关于逻辑或运算符那里,我也是值细想了一下才写出来这么简洁的。

posted @ 2022-12-22 11:29  moonbay  阅读(21)  评论(0编辑  收藏  举报