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

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

Войти
Регистрация
Восстановить пароль
 
makaroshka
2 / 2 / 0
Регистрация: 17.09.2013
Сообщений: 124
#1

Сформировать строку, удалив из каждого слова исходной строки повторяющиеся в нем буквы - C++

23.09.2015, 12:28. Просмотров 317. Ответов 6
Метки нет (Все метки)

Задание:
Для решения задачи вам нужно ввести строки с помощью функций gets или fgets, разбить строку на слова и выбрать нужные (функция scanf с форматом %s вводит строку до пробела, но в данной задаче вам не нужно так делать!). Стандартные функции работы со строками НЕ использовать! Обратите внимание, что во всех случаях слова могут разделяться любым (!) количеством символов, не относящихся к слову (будем считать, что к слову относятся большие и маленькие латинские буквы и цифры). Желательно всю обработку выполнить за один проход строки, хотя это возможно не во всех вариантах. Обязательно проверить работу программы на пустой строке и на строке, состоящей только из символов, не относящихся к слову.

Основное задание:
Сформировать строку, удалив из каждого слова исходной строки повторяющиеся в нем буквы.

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
62
63
64
65
66
67
#include <stdio.h>
#include <conio.h>
#include <iostream>
 
#include <locale.h>;
 
using namespace std;
 
int main(int argc, char *argv[]) {
    setlocale(LC_ALL, "Russian");
    char m[256], tmp[10];
    FILE *file1;
    char a[1];
    char res[256];
    int k;
    int l;
    if (argc < 2) {
        printf("Недостаточно аргументов\n");
    }
    else {
        if ((file1 = fopen(argv[1], "r")) == NULL)
        {
            printf("Невозможно открыть файл '%s'\n", argv[1]);
            return 0;
        }
        fgets(m, 256, file1);
        fclose(file1);
        for (k = 0; m[k] != '\0'; k++);
        m[k] = *" ";
        m[k + 1] = '\0';
 
        cout << m << "\n";
 
        k = 0;
        res[0] = '\0';
        for (int i = 0, j = 0; m[i] != '\0'; i++) {
            if (m[i] >= 'a' &&  m[i] <= 'z') {
                tmp[j++] = m[i];
            }
 
            else {
            
 
                 for (int p = 0; p<j; p++)
                        for (int k = p+1; p<j; k++)
                            if (tmp[p] == tmp[k]) {
                                for (int m = k; tmp[m] != '\0'; m++) {
                                    res[l++] = tmp[m+1]; 
                                    k--; }
                            }
                    j = 0;
                }
 
 
 
            }
 
 
        res[l - 1] = '\0';
 
        cout << "\nRES: ";
        for (int i = 0; res[i] != '\0'; i++)
            cout << res[i];
    }
 
    return 1;
}
Входной файл: mama papa ";;@ bratyk sestri :^2 deda

Программа не работает, просто закрывается
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2015, 12:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сформировать строку, удалив из каждого слова исходной строки повторяющиеся в нем буквы (C++):

Напечатать все слова, отличные от последнего слова строки, удалив из каждого слова первую и последнюю буквы - C++
Близиться сессия,а завтра мне сдавать 2 проги. Помогите ребят,могу даже 100 скинуть,если уж так трудно помочь. 8.Задан...

Удалить из каждого слова исходной строки две последние буквы - C++
Пожалуйста помогите, дана строка символов. Удалить из каждого слова исходной строки две последние буквы

Напечатать все слова строки, предварительно удалив из каждого слова все предыдущие вхождения последней буквы - C++
дана последовательность слов разделенных пробелами .Напечатать все слова предварительно удалив из каждого слова все предыдущие вхождения...

Вывести строку, удалив предварительно повторяющиеся слова - C++
Ввести строку. Вывести её, удалив предварительно повторяющиеся слова. Очень нужна помощь!!!

Сформировать новую матрицу, удалив из исходной строки, имеющие хотя бы один нулевой элемент - C++
написать программу на языки с++. задание на фотографии

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Игорь1986
49 / 113 / 29
Регистрация: 08.09.2014
Сообщений: 964
Завершенные тесты: 1
23.09.2015, 12:53 #2
Вопрос 1 синтаксис #include <locale.h>; надо #include <locale.h>
Во вторых задержку экрана надо ставить чтоб не выпадала
0
makaroshka
2 / 2 / 0
Регистрация: 17.09.2013
Сообщений: 124
23.09.2015, 15:41  [ТС] #3
Не понял, синтаксис поправил, программа, просто крашится, как будто переполнение.
0
Игорь1986
49 / 113 / 29
Регистрация: 08.09.2014
Сообщений: 964
Завершенные тесты: 1
23.09.2015, 15:53 #4
Отладчиком посмотри пошагово где падает
0
Kerry_Jr
Модератор
Эксперт PHP
2191 / 1987 / 694
Регистрация: 14.05.2014
Сообщений: 5,812
Записей в блоге: 1
Завершенные тесты: 5
23.09.2015, 17:09 #5
Цитата Сообщение от makaroshka Посмотреть сообщение
C++
1
m[k] = *" ";
в программе так же или сюда неудачно выложили?

Добавлено через 1 час 8 минут
makaroshka, а зачем вы делаете через файл? Разве в задании об этом что-нибудь сказано?
0
makaroshka
2 / 2 / 0
Регистрация: 17.09.2013
Сообщений: 124
23.09.2015, 18:49  [ТС] #6
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
в программе так же или сюда неудачно выложили?
Так же
0
makaroshka
2 / 2 / 0
Регистрация: 17.09.2013
Сообщений: 124
30.09.2015, 13:00  [ТС] #7
Вот исправил, но как код оптимизировать?
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
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <string.h>
 
using namespace std;
 
int main(int argc, char *argv[]) {
  char m[256], tmp[256];
  FILE *file1;
  char res[256];
  int k;
  if (argc < 2) {
    printf("Недостаточно аргументов\n");
  } else {  
   if ((file1 = fopen(argv[1], "r")) == NULL)
    { printf("Невозможно открыть файл '%s'\n", argv[1]);
      return 0;
     }
   fgets(m, 256, file1);
   fclose(file1);
     for (k = 0; m[k] !='\0' ; k++);
     m[k] = *" ";
     m[k+1] = '\0';
   
   cout << m <<"\n";
   k=0;     
   for (int i = 0,  j = 0; m[i] !='\0' ; i++) {
    if (m[i] >= 'a' &&  m[i] <= 'z') {
      tmp[j++]=m[i];
    } else {
         tmp[j++]='\0';
        if (tmp[0] !='\0') {
        
            for (int q=0; tmp[q] != '\0'; q++){
bool flag=true;
for (int w=0; tmp[w] != '\0'; w++)
if (q-w!=0 && tmp[q]==tmp[w]) flag=false;
if (flag) { res[k] = tmp[q];k++;}
}
            res[k++] = *" ";
        }
      j=0;
      
    } 
   }
 
     res[k++] = '\0';
    cout << "\nRES: ";
    for (int i = 0; res[i] != '\0'; i++) 
    cout<<res[i]; 
  } 
  getch();
  return 1;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2015, 13:00
Привет! Вот еще темы с ответами:

Сформировать новую строку, в которой слова исходной будут следовать в обратном порядке - C++
Нужна срочно ваша помощь...Не могу написать код для следующей задачи: &quot;Задан текст, состоящий из слов, записанных через запятые и/или...

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

Сформировать новую строку, состоящую из слов исходной строки - C++
задача такая: дана строка состоящая из слов разделенных пробелами сформировать новую строку состоящую из слов исходной строки Пример...

Сформировать из данной строки новую строку, удалив все кратные символы - C++
написать программу на си: дана строка АААВВСС, сформировать из нее новую строку АВС,удалив все кратные элементы. заранее спасибо)


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.09.2015, 13:00
Ответ Создать тему
Опции темы

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