【发布时间】:2021-08-30 07:52:50
【问题描述】:
我的任务是比较给定数量的 IP 地址。首先,我必须向用户询问数量,然后用户必须输入那么多IP。之后,我必须对它们进行比较——如果我发现有不止一次出现,我必须把它写出来。
我的问题是我不知道如何在没有我的双 for() 循环多次写出它们的情况下将它们写出来。您能帮帮我吗,我应该纠正什么?
#include<iostream>
#include<string>
int main(){
int n;
std::cin >> n;
std::string ips[n];
for(int i = 0; i < n; i++){
std::cin >> ips[i];
}
std::cout << "\n\n";
for(int i = 0; i < n-1; i++){
for(int j = i+1; j < n; j++){
if(ips[i] == ips[j]){
std::cout << ips[j] << '\n';
}
}
}
return 0;
}
【问题讨论】:
-
std::string ips[n];在标准 C++ 中是非法的,因为n的值必须在编译时而不是运行时已知。在这种情况下首选std::vector<std::string> ips(n)。 -
你知道
std::sort怎么用吗?你知道std::map或std::set怎么用吗? -
还要注意
192.168.0.1和192.168.000.001等组合是同一个IP地址。您可能需要首先对表示进行规范化,或者至少与分配给您任务的人核实。 -
@SamVarshavchik 我没有。我是 C++ 的初学者,所以我正在尝试用非常基本的技术来解决问题
-
使用内置函数和数据结构远比重新发明轮子更基本。调用函数
std::sort比编写自己的排序算法要简单得多。如前所述,地址192.168.0.1和192.168.0.001在技术上是相同的。您是否必须将这些作为副本,或者它们是您案件的不同地址?即使192.168.0.2不是用户输入的,也可以将192.168.0.002打印为192.168.0.2吗?