就是简单的字符串比较和排序。

   一开始看到之前写的代码是用了map,觉得没必要用map,只需要pair就可以了。等做完才发现原来输出要求是要按id的字典序排序的,而map在插入的过程中就自动排序了。所以最后还是用了map,省得自己写排序^_^。

   先贴下之前的代码,应该是不熟悉string(可能是混淆了C和C++的string导致错误又懒得去解决,所以使用了数字的比较,写得很繁琐,但很可爱地处理了输入"."的问题。←_←NC)

   需要注意的是每次循环需要先清空idMap。

#include 
#include
#include
using namespace std;int main(){ int n; string id[20]; map
idMap; map
::iterator it; int ip[20][5]; int i, j, k, m; char aDot; int count; cin >> n; while( n != 0 ) { idMap.clear(); for( i = 0; i < n; i++ ) { j = 0; cin >> id[i]; for( j = 0; j < 3; j++ ) { cin >> ip[i][j]; cin >> aDot; } cin >> ip[i][j]; ip[i][4] = 0; // 标志位,0为未发现 for( k = 0; k < i; ++k ) { if( ip[i][4] == 0 ) { count = 0; for( m = 0; m < 4; ++m ) { if( ip[k][m] != ip[i][m] ) break; else count++; } if ( count == 4 ) { ip[i][4] = 1; ip[k][4] = 1; idMap.insert(pair
(id[k], id[i])); break; } } } } for( it = idMap.begin(); it != idMap.end(); ++it ) cout << it -> second << " is the MaJia of " << it->first << endl; cout << endl; cin >> n; } return 0;}

   接下来贴新写的代码。由于混淆了C和C++的string。include进来的是string却用了strcmp函数,导致报错——“no matching function for call to 'strcmp(std::string&, std::string&)”,查了一下发现C++直接用大于号小于号等号比较字符串,所以果断用C++的字符串了,而不改成include<cstring>。

#include 
#include
#include
using namespace std;int main(){ int n; string id[20], ip[20]; map
idMap; map
::iterator it; int i, j, k, cnt; cin >> n; while( n != 0 ) { idMap.clear(); for( i = 0; i < n; i++) { cin >> id[i] >> ip[i]; } for (i=0;i
second << " is the MaJia of " << it->first << endl; } cout << endl; cin >> n; } return 0;}