Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
John_10
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 5
#1

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

24.12.2011, 23:17. Просмотров 431. Ответов 6
Метки нет (Все метки)

Здравствуйте! Проверьте пожалуйста код, а то у меня не выполняется пункт "Б".
Вот условие задачи -

Задан текст, состоящий из строк произвольной длины. Строки разделаются одним символом или несколькими, называемыми разделителями. Разделители одинаковы для всего текста. Текст заканчивается комбинацией двух специальных символов, отличных от разделителя.
Написать программу, выполняющую над текстом следующую последовательность действий:
А) Определить (считая от начала текста) координаты (номер строки и номер символа в строке) символов, которые задаются в исходных данных;
Б) сформировать новый текст, состоящий из строк заданного текста, в каждой из которых любой из заданных символов встречается не более одного раза.

А вот код -
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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2011, 23:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Строки. Проверьте код, пожалуйста. (C++):

Написать код для игры НИМ. проверьте пожалуйста тот ли это код - C++
#include &lt;string&gt; using namespace std; int compChoose(int markers); int userChoose(int markers); int...

Проверьте пожалуйста код - C++
#include &lt;iostream&gt; #include&lt;stdlib.h&gt; // в этом файле содержатся функции rand() и srand() #include&lt;time.h&gt; ...

Проверьте код пожалуйста - C++
В чем ошибка? Если он в ответе выдает только: Vvedite element massiva: A= #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include...

Проверьте пожалуйста код - C++
Программа должна проверить введенную строчку на соответствие слову как паролю.Условия Не меньше 8 символов, содержание латинских букв и...

Проверьте код пожалуйста - C++
Цель работы Создать программу, которая вычисляет значения функции заданного диапазона; необходимо организовать ввод границ интервала,...

Проверьте пожалуйста код (C++) - C++
Вот я сам написал код(!)) Можете проверить: main() { printf(&quot;Content-type:text/html\n\n&quot;);

6
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;
}
0
John_10
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 5
25.12.2011, 18:58  [ТС] #3
Wanderer1, ошибка у Вас где-то... Программа не определяет координаты символа и неправильно создает новый текст.
0
Wanderer1
23 / 23 / 4
Регистрация: 26.03.2011
Сообщений: 54
25.12.2011, 19:13 #4
Цитата Сообщение от John_10 Посмотреть сообщение
Проверьте пожалуйста код, а то у меня не выполняется пункт "Б".
я и не проверял пункт А.
как это не правильно?
0
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
Программа удаляет нужные символы.
0
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();
}
это к пункту Б.
1
John_10
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 5
25.12.2011, 19:56  [ТС] #7
Wanderer1, ой, да, извиняюсь... Все правильно.
И пункт А тоже работает. Спасибо большое!
0
25.12.2011, 19:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2011, 19:56
Привет! Вот еще темы с ответами:

Проверьте код пожалуйста на цикл в С++ - C++
Почему он не выдает мне полную сумму? Где здесь не правильно написано #include &quot;stdafx.h&quot; #include &lt;math.h&gt; #include &lt;conio.h&gt; int...

Проверьте пожалуйста код на ошибку - C++
Всем привет , программа при вводе сравнивает является ли слово Палиндромом или нет. Проблема 1)Если я введу например aabcaa то...

Проверьте пожалуйста код на правильность ! ! ! - C++
2. Дан массив размера 5 x 6 с элементами целого типа. Написать программу для вычисления числа элементов массива кратных 3. За ранее...

Проверьте пожалуйста код на правильность ! - C++
2. Даны два вектора и найти угол между ними и модуль векторного произведения векторов X и Y. При вычислении использовать...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru