Программа выводит пустой экран
в главе 3 есть такой код, который должен читать файл со словами и находить в них анаграммы:
Код:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
int main()
{
char buff[80];
string sbuff;
multimap<string, string> an;
multimap<string, string>::iterator im,ane;
ifstream infile("diction");
while (1)
{
infile.getline(buff, sizeof(buff));
if(infile.eof()) break;
sbuff = buff;
sort(sbuff.begin(), sbuff.end());
an.insert(pair<string, string>(sbuff, buff));
}
im = an.begin();
ane = an.end();
vector<multimap<string, string>::iterator> chg;
chg.push_back(im);
while (++im != ane)
{
chg.push_back(im);
if((*im).first != (*chg[0]).first)
{
if(chg.size() > 2)
{
for(unsigned int i=0; i < chg.size() - 1; i++);
cout << endl;
}
chg.clear();
chg.push_back(im);
}
}
if(chg.size() > 1)
for(unsigned int i=0; i < chg.size(); i++)
cout << (*chg[i]).second << endl;
infile.close();
}
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
int main()
{
char buff[80];
string sbuff;
multimap<string, string> an;
multimap<string, string>::iterator im,ane;
ifstream infile("diction");
while (1)
{
infile.getline(buff, sizeof(buff));
if(infile.eof()) break;
sbuff = buff;
sort(sbuff.begin(), sbuff.end());
an.insert(pair<string, string>(sbuff, buff));
}
im = an.begin();
ane = an.end();
vector<multimap<string, string>::iterator> chg;
chg.push_back(im);
while (++im != ane)
{
chg.push_back(im);
if((*im).first != (*chg[0]).first)
{
if(chg.size() > 2)
{
for(unsigned int i=0; i < chg.size() - 1; i++);
cout << endl;
}
chg.clear();
chg.push_back(im);
}
}
if(chg.size() > 1)
for(unsigned int i=0; i < chg.size(); i++)
cout << (*chg[i]).second << endl;
infile.close();
}
В фрагменте
Код:
if(chg.size() > 2)
{
for(unsigned int i=0; i < chg.size() - 1; i++);
cout << endl;
}
{
for(unsigned int i=0; i < chg.size() - 1; i++);
cout << endl;
}
1. убрана `;` на конце цикла
2. добавлена строчка cout << (*chg).second << endl;
Код:
if(chg.size() > 2)
{
for(unsigned int i=0; i < chg.size() - 1; i++)
cout << (*chg[i]).second << endl;
cout << endl;
}
{
for(unsigned int i=0; i < chg.size() - 1; i++)
cout << (*chg[i]).second << endl;
cout << endl;
}
Если я ничего не путаю, результатом операции sizeof(buff) будет размер типа char, т.е. 1.
Для статических массивов sizeof дает размер содержимого (80 в данном примере).
Правда, не все так просто при передаче массивов в функции, например. См. здесь.