我正在通过解决一些旧的Google Code Jam问题来练习C++。我找到了一个相对简单的问题,即反转字符串中的单词。它可以在这里找到https://code.google.com/codejam/contest/351101/dashboard#s=p1
到目前为止,我的代码如下:
#include<iostream>
using namespace std;
int main(){
int n = 0;
cin >> n;
string rev = "";
string buf = "";
string data = "";
getline(cin, data);
for(int _ = 0; _ < n; _++){
getline(cin, data);
rev = "";
buf = "";
for(char& c : data) {
buf += c;
if(c == ' '){
rev = buf + rev;
buf = "";
}
}
cout << "Case #" << _ + 1 << ": " << buf << " " << rev << endl;
}
return 0;
}
这似乎运行得很快。当使用大约1.2E6
个测试用例的测试文件并使用g++ -O3
编译时,运行time ./reverse < in > /dev/null
需要约3.5
秒。
因此,我创建了一个Python解决方案作为基准。
#!/usr/bin/env python
from sys import stdin, stdout
stdout.writelines(map(lambda n: "Case #%d: %s\n" % (n + 1, ' '.join(stdin.readline().split()[::-1])), xrange(int(stdin.readline()))))
然而,当我在pypy
下运行它时,使用time pypy reverse.py < in > /dev/null
只需要约1.95
秒。
理论上说,由于pypy
是用C++编写的,C++不应该更快吗?如果是这样,如何优化此代码以使其更快?