Форум программистов, компьютерный форум CyberForum.ru

Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки) - C++

Восстановить пароль Регистрация
 
MGOU
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 12
10.06.2013, 00:28     Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки) #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <set>
#include <iterator>
#include <fstream>
#include <string>
#include <algorithm>
 
int main()
{
    std::fstream ifs("in.txt", std::ios::in), ofs("out.txt", std::ios::out);
    if(ifs.is_open() && ofs.is_open())
    {
        std::multiset<std::string, bool(*)(std::string const&, std::string const&)> mset([](std::string const& str1, std::string const& str2){return str1.size() < str2.size();});
        std::string str;
        while(std::getline(ifs, str))
            mset.insert(str);
        std::copy(mset.begin(), mset.end(), std::ostream_iterator<std::string>(ofs, "\n"));
        ofs.close();
        ifs.close();
    }
    else
        std::cerr << "Unable to open file(s)\n";
    return 0;
}
вылазят ошибки

Error 1 error C3409: empty attribute block is not allowed c:\users\тимофей\documents\visual studio 2008\projects\22\22\22.cpp 17 22
Error 2 error C2059: syntax error : '(' c:\users\тимофей\documents\visual studio 2008\projects\22\22\22.cpp 17 22
Error 3 error C2143: syntax error : missing ')' before '{' c:\users\тимофей\documents\visual studio 2008\projects\22\22\22.cpp 17 22
Error 4 error C2059: syntax error : ')' c:\users\тимофей\documents\visual studio 2008\projects\22\22\22.cpp 17 22
Error 5 error C2143: syntax error : missing ')' before '{' c:\users\тимофей\documents\visual studio 2008\projects\22\22\22.cpp 17 22
Error 6 error C2143: syntax error : missing ';' before ')' c:\users\тимофей\documents\visual studio 2008\projects\22\22\22.cpp 17 22
Error 7 error C2143: syntax error : missing ';' before '{' c:\users\тимофей\documents\visual studio 2008\projects\22\22\22.cpp 17 22
Error 8 error C2065: 'str1' : undeclared identifier c:\users\тимофей\documents\visual studio 2008\projects\22\22\22.cpp 17 22
Error 9 error C2228: left of '.size' must have class/struct/union c:\users\тимофей\documents\visual studio 2008\projects\22\22\22.cpp 17 22
Error 10 error C2065: 'str2' : undeclared identifier c:\users\тимофей\documents\visual studio 2008\projects\22\22\22.cpp 17 22
Error 11 error C2228: left of '.size' must have class/struct/union c:\users\тимофей\documents\visual studio 2008\projects\22\22\22.cpp 17 22
Error 12 error C2059: syntax error : ')' c:\users\тимофей\documents\visual studio 2008\projects\22\22\22.cpp 17 22
Error 13 error C2228: left of '.insert' must have class/struct/union c:\users\тимофей\documents\visual studio 2008\projects\22\22\22.cpp 20 22
Error 14 error C2228: left of '.begin' must have class/struct/union c:\users\тимофей\documents\visual studio 2008\projects\22\22\22.cpp 21 22
Error 15 error C2228: left of '.end' must have class/struct/union c:\users\тимофей\documents\visual studio 2008\projects\22\22\22.cpp 21 22
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2013, 00:28     Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки)
Посмотрите здесь:

C++ вывести слова строки в порядке убывания ее длины
Переписать в выходную строку слова из входной строки в порядке возрастания их длины C++
Переписать в выходную строку слова из входной строки в порядке возрастания их длины. C++
C++ Дан строковый файл. Создать новый строковый файл, содержащий все строки исходного файла наименьшей длины (в том же порядке).
Текстовый файл содержит строки – предложения разной длины. Записать их в выходной файл в порядке возрастания длины строки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
10.06.2013, 00:30     Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки) #2
MGOU, все верно. Видимо, Вы не используете компилятор с новым стандартом С++11.
MGOU
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 12
10.06.2013, 01:07  [ТС]     Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки) #3
Цитата Сообщение от BumerangSP Посмотреть сообщение
MGOU, все верно. Видимо, Вы не используете компилятор с новым стандартом С++11.
возможно ли сделать для обычной C++ 2008 года?завтра(то есть сегодня уже сдавать)

Добавлено через 15 минут
Цитата Сообщение от BumerangSP Посмотреть сообщение
MGOU, все верно. Видимо, Вы не используете компилятор с новым стандартом С++11.
ну вот например ещё нашёл на этом форуме программу она вроде как написана на c++, всё проходит без ошибок, но в файл g.txt вообще ничего не выводит

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <algorithm>
#include <functional>
#include <iterator>
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
 
class by_length_string_copmarer : 
    public std::binary_function<std::string, std::string, bool>
{
public:
    bool operator () (const std::string& s1, const std::string& s2)
    {
        return s1.length() < s2.length();
    }
};
 
bool sort_and_copy(const char *src, const char *dst)
{
    std::vector<std::string> vec;
    std::ifstream ifs(src);
    if (!ifs.is_open())
        return false;
    char ch;
    while (!ifs.eof())
    {
        std::ostringstream outs;
        while (!ifs.eof())
        {
            ch = ifs.get();
            if (ch != EOF)
            {
                outs << ch;
                if (ch == '.' || ch == '!' || ch == '?')
                    break;
            }
        }
        vec.push_back(outs.str());
    }
    ifs.close();
    std::ofstream ofs(dst);
    if (!ofs.is_open())
        return false;
    std::sort(vec.begin(), vec.end(), by_length_string_copmarer());
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<std::string>(ofs, "\r\n"));
    return true;
}
 
int main()
{
    return !sort_and_copy("D:\\f.txt", "D:\\g.txt");
}
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
10.06.2013, 01:10     Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки) #4
MGOU, проще выложить задание, возможно, ее больше захотят с нуля написать.
__guest__
Заблокирован
10.06.2013, 01:13     Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки) #5
твой код из #1поста + компилятор mingw + опция std=c++11 = счастье

Добавлено через 1 минуту

Не по теме:

и какой же там фак ненужности

MGOU
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 12
10.06.2013, 01:32  [ТС]     Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки) #6
Цитата Сообщение от BumerangSP Посмотреть сообщение
MGOU, проще выложить задание, возможно, ее больше захотят с нуля написать.
вот само задание

Текстовый файл содержит строки – предложения разной длины. Записать их в выходной файл в порядке возрастания длины строки.

Добавлено через 1 минуту
Цитата Сообщение от __guest__ Посмотреть сообщение
твой код из #1поста + компилятор mingw + опция std=c++11 = счастье

Добавлено через 1 минуту

Не по теме:

и какой же там фак ненужности

а где эту опцию найти c++11?
__guest__
Заблокирован
10.06.2013, 01:36     Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки) #7
Цитата Сообщение от MGOU Посмотреть сообщение
а где эту опцию найти c++11?
Цитата Сообщение от __guest__ Посмотреть сообщение
твой код из #1поста + компилятор mingw + опция std=c++11 = счастье
ну давай будем учиться понимать йазэг математеги

Добавлено через 41 секунду
A+B+C=D -- D естьрезультат
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
10.06.2013, 01:52     Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки) #8
MGOU, переписал под C++03. Пробуйте...
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <set>
#include <iterator>
#include <fstream>
#include <string>
#include <algorithm>
 
struct comp 
{
    bool operator () (const std::string &a, const std::string &b)
    { return a.size() < b.size(); }
};
 
int main()
{
    std::fstream ifs("in.txt", std::ios::in), ofs("out.txt", std::ios::out);
    if (ifs.is_open() && ofs.is_open()) {
        std::multiset<std::string, comp> mset;
        std::string str;
        while(std::getline(ifs, str))
            mset.insert(str);
        std::copy(mset.begin(), mset.end(), std::ostream_iterator<std::string>(ofs, "\n"));
        ofs.close();
        ifs.close();
    } else
        std::cerr << "Unable to open file(s)\n";
    return 0;
}


Добавлено через 2 минуты
MGOU,
и строку
C++
1
std::multiset<std::string, bool(*)(std::string const&, std::string const&)> mset([](std::string const& str1, std::string const& str2){return str1.size() < str2.size();});
можно записать попроще, вот так:
C++
1
2
auto comp = [](std::string const& str1, std::string const& str2){return str1.size() < str2.size();};
std::multiset<std::string, decltype(comp)> mset(comp);
__guest__
Заблокирован
10.06.2013, 01:56     Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки) #9
ПРОДОЛЖАЙ!!! MSVC твой верный товарищ!!!
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
10.06.2013, 02:04     Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки) #10
Ну, еще вот с вектором.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <vector>
#include <iterator>
#include <fstream>
#include <string>
#include <algorithm>
 
bool length(const std::string &str1, const std::string &str2)
{
    return str1.size() < str2.size();
}
 
int main()
{
    std::fstream ifs("in.txt", std::ios::in), ofs("out.txt", std::ios::out);
    if(ifs.is_open() && ofs.is_open())
    {
        std::vector<std::string> strings;
        std::string str;
        while(!ifs.eof())
        {
            std::getline(ifs, str);
            strings.push_back(str);
        }
        std::sort(strings.begin(), strings.end(), length);
        std::copy(strings.begin(), strings.end(), std::ostream_iterator<std::string>(ofs, "\n"));
        ofs.close();
        ifs.close();
    }
    else
        std::cerr << "Unable to open file(s)\n";
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4924 / 2667 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
10.06.2013, 02:21     Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки) #11
BumerangSP, использовать вектор с единственной целью - отсортировать и вывести на экран нерационально. Тут multiset само напрашивается.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
10.06.2013, 02:26     Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки) #12
MrGluck, угу, ну, пусть буде как вариант, с set ведь уже есть
__guest__
Заблокирован
10.06.2013, 03:08     Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки) #13
Цитата Сообщение от MrGluck Посмотреть сообщение
использовать вектор с единственной целью - отсортировать и вывести на экран нерационально. Тут multiset само напрашивается
Туту подразумевается псевдойазык и псевдоконструкции. Не выше
MGOU
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 12
10.06.2013, 03:15  [ТС]     Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки) #14
ребят всем огромное спасибо!!!

у меня последний вопрос, куда ложить файл in.txt?а то у меня Unable to open file(s)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2013, 03:18     Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки)
Еще ссылки по теме:

Текстовый файл содержит строки – предложения разной длины. Записать их в выходной файл в порядке возрастания длины строки C++
Как отсортировать строки файла в порядке возрастания их длины C++
Замена слов разной длины в файле C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4924 / 2667 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
10.06.2013, 03:18     Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки) #15
MGOU, если VS - в папку с проектом
Yandex
Объявления
10.06.2013, 03:18     Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки)
Ответ Создать тему
Опции темы

Текущее время: 14:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru