优化#include <iostream>#include <string>#include <vector>#include <algorithm>using namespace std;int main() { string code1 = "int main() {int a = 1; float b = 2.0; while(a < 10) {a++; if(a == 5) break;} return 0;}"; string code2 = "int main() {double x = 3.0; int y = 4; for(int i = 0; i < y; i++) {if(i % 2 == 0) continue; y--;}}"; vector<string> segments = {"{int a = 1", "while(a < 10)", "if(a == 5)", "int y = 4;", "for(int i = 0;", "if(i % 2 == 0)"}; int count = 0; for (int i = 0; i < segments.size(); i++) { if (code2.find(segments[i]) != string::npos) { count++; } } double plagiarism = (double)count / (double)segments.size(); cout << "抄袭概率:" << plagiarism << endl; if (plagiarism > 0.5) { cout << "可能存在抄袭行为!" << endl; } else { cout << "不存在抄袭行为。" << endl; } return 0;}
时间: 2024-03-30 15:34:30 浏览: 52
这段代码中可以进行一些优化:
1. 在使用 vector 存储子串的时候,可以使用常量数组来代替,这样可以节省一些内存空间。
2. 在循环中使用迭代器来遍历 vector,这样可以提高程序的效率。
3. 在判断子串是否存在的时候,可以使用 unordered_set 来代替 vector,这样可以更快地进行查找操作。
4. 在输出抄袭概率的时候,可以将小数点后面的数字格式化为固定位数,这样可以更加美观。
下面是优化后的代码:
#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;
int main() {
string code1 = "int main() {int a = 1; float b = 2.0; while(a < 10) {a++; if(a == 5) break;} return 0;}";
string code2 = "int main() {double x = 3.0; int y = 4; for(int i = 0; i < y; i++) {if(i % 2 == 0) continue; y--;}}";
const string segments[] = {"{int a = 1", "while(a < 10)", "if(a == 5)", "int y = 4;", "for(int i = 0;", "if(i % 2 == 0)"};
int count = 0;
unordered_set<string> segmentSet(segments, segments + 6);
for (auto it = segmentSet.begin(); it != segmentSet.end(); ++it) {
if (code2.find(*it) != string::npos) {
count++;
}
}
double plagiarism = (double)count / 6.0;
cout.precision(3); // 设置输出小数点后三位
cout << "抄袭概率:" << fixed << plagiarism << endl;
if (plagiarism > 0.5) {
cout << "可能存在抄袭行为!" << endl;
} else {
cout << "不存在抄袭行为。" << endl;
}
return 0;
}
阅读全文