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

Строки. Проверьте код, пожалуйста. - C++

Восстановить пароль Регистрация
 
John_10
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 5
24.12.2011, 23:17     Строки. Проверьте код, пожалуйста. #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
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
55
56
57
58
59
60
61
#include <iostream>
#include <string>
#include <fstream>
#include <set>
 
int main()
{
    setlocale( LC_ALL, ".1251" );
    std::ifstream in( "input.txt", std::ios::in );
    std::ofstream out( "output.txt", std::ios::out );
 
    char c;
    std::cout << "Введите символ: ";
    std::cin >> c;
 
    std::string s;
    unsigned int index = 0;
    
    // Читаем файл до конца по строкам
    while ( std::getline( in, s ) )
    {
        // Если есть нужный символ в строке
        if ( s.find( c ) != std::string::npos )
        {
            std::cout << index + 1 << " строка, позиции: ";
            for ( size_t i = 0; i < s.length(); i++ )
                if ( s[ i ] == c )
                    std::cout << i + 1 << " ";
            std::cout << std::endl;
        }
        // Увеличиваем индекс прочитанных строк
        index++;
    }
    in.close();
    std::set < char > charset;
 
    in.open( "input.txt" );
    while ( std::getline( in, s ) )
    {
        unsigned int i = 0;
        bool Checker( false );
 
        // Пока не конец строки...
        while ( i < s.length() && !Checker )
        {
            // Проверяем, есть ли повторные символы
            Checker = ( charset.find( s[ i ] ) != charset.end() );
            if ( !Checker )
                // Если нет, то добавляем символ к множеству
                charset.insert( s[ i ] );
            i++;
        }
        if ( !Checker )
            out << s << std::endl;
        charset.clear();
    }
        
    in.close();
    out.close();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2011, 23:17     Строки. Проверьте код, пожалуйста.
Посмотрите здесь:

C++ Проверьте пожалуйста код
Проверьте пожалуйста код (C++) C++
C++ Проверьте пожалуйста код
C++ Проверьте пожалуйста код на правильность !
C++ Проверьте пожалуйста код на правильность ! ! !
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wanderer1
23 / 23 / 4
Регистрация: 26.03.2011
Сообщений: 54
25.12.2011, 01:00     Строки. Проверьте код, пожалуйста. #2
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
55
56
57
58
59
#include <iostream>
#include <string>
#include <fstream>
#include <set>
 
int main()
{
    setlocale( LC_ALL, ".1251" );
    std::ifstream in( "input.txt" );
    std::ofstream out( "output.txt", std::ios::out );
 
    char c;
    std::cout << "Введите символ: ";
    std::cin >> c;
 
    std::string s;
    unsigned int index = 0;
        
        // Читаем файл до конца по строкам
    while ( std::getline( in, s ) )
    {
                // Если есть нужный символ в строке
        if ( s.find( c ) != std::string::npos )
        {
            std::cout << index + 1 << " строка, позиции: ";
            for ( size_t i = 0; i < s.length(); i++ )
                if ( s[ i ] == c )
                    std::cout << i + 1 << " ";
            std::cout << std::endl;
        }
                // Увеличиваем индекс прочитанных строк
        index++;
    }
    in.close();
    std::set < char > charset;
    in.clear();
    in.open( "input.txt" );
    if(!in){std::cout<<"Error not opened file"<<std::endl;}
    while ( std::getline( in, s ) )
    {
        unsigned int i = 0;
        bool Checker( false );
 
                // Пока не конец строки...
        while ( i < s.length() )
        {   
            // Проверяем, есть ли повторные символы            
                                // Если нет, то добавляем символ к множеству
            if(charset.find( s[ i ] ) == charset.end()){
                out<<s[i];charset.insert( s[ i ] );}
            i++;
        }
        out<<std::endl;     
        charset.clear();
    }        
    in.close();
    out.close();
    return 0;
}
John_10
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 5
25.12.2011, 18:58  [ТС]     Строки. Проверьте код, пожалуйста. #3
Wanderer1, ошибка у Вас где-то... Программа не определяет координаты символа и неправильно создает новый текст.
Wanderer1
23 / 23 / 4
Регистрация: 26.03.2011
Сообщений: 54
25.12.2011, 19:13     Строки. Проверьте код, пожалуйста. #4
Цитата Сообщение от John_10 Посмотреть сообщение
Проверьте пожалуйста код, а то у меня не выполняется пункт "Б".
я и не проверял пункт А.
как это не правильно?
John_10
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 5
25.12.2011, 19:27  [ТС]     Строки. Проверьте код, пожалуйста. #5
Wanderer1, ну вот, например, напишем вот такой текст -
"тест программы
программа"

И вот что получается в output файле http://img651.imageshack.us/img651/1332/98765b.png
Программа удаляет нужные символы.
Wanderer1
23 / 23 / 4
Регистрация: 26.03.2011
Сообщений: 54
25.12.2011, 19:51     Строки. Проверьте код, пожалуйста. #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
while ( std::getline( in, s ) )
    {
        bool Checker( true );
                // Если есть нужный символ в строке
        if ( s.find( c ) != std::string::npos )
        {            
            for ( size_t i = 0; i < s.length(); i++ )
                if ( s[ i ] == c ){
                    if (Checker) {std::cout << index + 1 << " строка, позиции: ";
                    Checker=false;}
                    std::cout << i + 1 << " ";}
            std::cout << std::endl;
        }
                // Увеличиваем индекс прочитанных строк
        index++;
    }
это к пункту А

Добавлено через 15 минут
C++
1
2
3
4
5
6
7
8
9
10
11
while ( std::getline( in, s ) )
{
    unsigned int i = 0;        
       if ( s.find( c ) != std::string::npos )
       {            
          for ( size_t i = 0; i < s.length(); i++ )
            if ( s[ i ] != c ){
    out<<s[i];charset.insert( s[ i ] );} 
    out<<std::endl; }       
       charset.clear();
}
это к пункту Б.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2011, 19:56     Строки. Проверьте код, пожалуйста.
Еще ссылки по теме:

Проверьте код пожалуйста C++
Написать код для игры НИМ. проверьте пожалуйста тот ли это код C++
C++ Проверьте код пожалуйста

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

Или воспользуйтесь поиском по форуму:
John_10
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 5
25.12.2011, 19:56  [ТС]     Строки. Проверьте код, пожалуйста. #7
Wanderer1, ой, да, извиняюсь... Все правильно.
И пункт А тоже работает. Спасибо большое!
Yandex
Объявления
25.12.2011, 19:56     Строки. Проверьте код, пожалуйста.
Ответ Создать тему
Опции темы

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