螃蟹啊就是横呀横着走 2014-04-10 10:00 采纳率: 0%
浏览 1726

map<int,int>mymap 从文件输入map怎么输入

题目是这样子的:
硬盘中存有两个数据文件,data1.txt 和 data2.txt。
文件数据格式如下:
item1:value1 item2:value2 item3:value3......
item 和 value 均是整数。试编写程序,合并两个文件的数
据到一个新文件 data.txt 中。新文件中的 item 是原有文件的并
集,按 item 值升序排序(注意原文件并不排序);新文件中的每个
item 对应的 value 值是原文件相应 value 值的和。
文件中,每 10 组数据换一行。
下面是一个简单例子
data1.txt
1:34 18:23 44:54 198:22 12:23 33:23 134:11
data2.txt

18:22 12:11 5:12 6:6 35:12 145:165 20:12 198:28
合并输出文件 data.txt 的内容应该是:
1:34 5:12 6:6 12:34 18:45 20:12 33:23 35:12 44:54 134:11
145:165 198:50

百度到大神写的是这样的:
#include
#include
#include
#include
#include
using namespace std;
void main()
{
string ss="";
map mymap;
ifstream is("data1.txt");
while(is>>ss)
{
mymap[ss.substr(0,ss.find(':'))]=::atoi(
(ss.substr(ss.find(':')+1,ss.size()-ss.find(':')-1)).c_str());
}
is.close();is.clear();
is.open("data2.txt");
while(is>>ss)
{
mymap[ss.substr(0,ss.find(':'))]+=::atoi(
(ss.substr(ss.find(':')+1,ss.size()-ss.find(':')-1)).c_str());
}
map::const_iterator iter=mymap.begin();
ofstream os("data.txt");int cnt=0;
while(iter!=mymap.end())
{
os<<(*iter).first<<":"<<(*iter).second<<" ";
if(++cnt%10==0)
os<<endl;
++iter;
}
os.close();os.clear();
::system("pause");
}

但是这样的输出不符合要求
1:91 100:89 1001:24 1003:45 1005:83 1007:52 101:31 1010:28 1011:22 1017:83
1019:58 1021:8 1024:70 1025:36 1028:96 1030:73 1032:13 1033:124 1035:7 1036:55
104:59 1041:2 1048:65 1049:3 1051:87 1052:69 1054:22 1055:53 106:93 1061:84
1063:89 1066:8 1067:94 1068:53 107:7 1071:61 1072:47 1073:30 1075:4 1079:47
1081:21 1082:7 1083:64 1084:22 1085:74 1086:37 109:9 1092:54 1098:98 11:60
110:164 1103:134 1104:13 111:3 1116:12 112:29 1121:27 1122:92 1123:77 1126:45
1127:78 1129:30 1131:7 1132:85 1134:11 1136:97 1140:67 1143:4 1145:51 1147:87
1151:5 1154:90 116:89 1160:12 1161:40 1163:98 1165:75 1168:123 117:83 1170:25
1171:11 1173:32 1174:83 1178:40 1179:21 1180:100 1183:99 1184:153 1193:107 1195:49
1196:45 120:22 1200:44 1207:4 1208:45 1210:42 1212:34 1215:28 1217:95 1218:100
122:19 1220:65 1224:88 1227:141 1228:30 1229:94 123:57 1230:5 1231:34 1234:6
1235:32 1236:62 1241:34 1242:11 1243:38 1244:57 125:47 1251:85 1252:59 1253:29
1254:45 1256:57 1258:99 1260:9 1261:26 1263:88 127:24 1273:18 1274:116 1275:91
1277:40 1278:77 1279:45 128:57 1280:68 1282:25 1287:43 1290:70 1291:8 1292:91
1293:96 1294:32 1295:50 1298:40 1299:7 130:50 1302:56 1303:30 1305:43 1306:26
1310:36 1311:48 1312:106 1315:88 1318:149 132:24 1323:93 1326:58 1327:97 1328:74
1329:48 1333:9 1339:62 134:74 1340:71 1341:3 1342:33 1343:7 1345:43 1346:96
1348:21 1350:45 1357:30 1359:47 1360:29 1361:64 1362:59 1365:137 1367:71 1371:35
1374:138 1375:114 1378:86 1380:68 1384:89 139:88 1390:93 1391:79 1392:4 1397:93
1398:99 1401:1 1403:42 1404:71 1406:56 1407:33 1412:62 1414:62 1416:78 1417:80
1418:72 1419:12 1421:85 1423:90 1425:46 1427:62 1429:60 1430:25 1431:118 1433:32
1435:32 1437:84 1443:100 1446:43 1447:49 1448:96 145:40 1450:52 1451:82 1454:27
1456:99 1458:94 1460:23 1465:67 1467:43 1468:124 1470:148 1477:83 1479:43 148:9
1485:142 149:88 1490:67 1495:30 1496:79 1497:39 1499:61 15:79 1503:35 1504:23
1505:86 1508:94 1511:86 1516:105 1517:54 152:57 1520:39 1521:3 1523:80 1525:63
153:74 1532:47 1533:61 1534:81 1537:75 1538:12 1542:4 1544:29 1545:94 1547:13
1551:53 1553:64 1554:10 1555:16 1557:58 156:35 1560:79 1563:23 1564:15 1565:36
1566:63 1567:84 1568:66 1569:62 157:90 1574:139 1577:26 158:94 1585:98 1586:43
1587:76 1589:56 1594:2 1598:19 1599:43 1602:13 1605:55 1607:71 1608:11 1609:43
161:40 1611:57 1613:56 1619:52 162:68 1620:99 1622:131 1623:21 1624:64 1626:88
1627:1 163:70 1631:92 1632:92 1633:12 1635:83 1637:86 1641:36 1642:80 1645:10
1650:23 1656:23 1657:13 166:80 1662:75 1665:38 1667:153 1669:95 1670:25 1671:65
1672:88 1674:100 1675:20 1676:12 1678:98 168:45 1680:10 1681:51 1682:74 169:99
1690:16 1695:93 1697:76 1699:93 1703:8 1704:38 1705:68 1707:78 1708:85 1709:68……

老师要求按从小到大的顺序啊 我想是不是因为大神用的是mapmymap 所以我想把它修改成mapmymap 但是就不知道怎么输入了

while(in>>ss)//这里while循环是读文件里面的字符串,直到文件终止跳出,并且将流转成字符串
{
mymap[atoi(ss.substr(0,ss.find(':')))]=::atoi(
(ss.substr(ss.find(':')+1,ss.size()-ss.find(':')-1)).c_str());
//这里ss.substr是找子字符串,find(':')是查找第一个包含:的索引。
//结合起来就是获取从第一个字节开始到第一个:符号的这部分子字符串。
//atoi是字符转int函数。c_str是char*转string的函数。
//这行代码总体的意思就是将文件分成两段,:前面的作为map的键,;后面的字节流转化为int后,作为map的值。
}

总是显示出错 atoi到底怎么用啊 求大神帮助 感激不尽

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-20 21:45
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题