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

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

Восстановить пароль Регистрация
 
makaroshka
2 / 2 / 0
Регистрация: 17.09.2013
Сообщений: 117
23.09.2015, 12:28     Сформировать строку, удалив из каждого слова исходной строки повторяющиеся в нем буквы #1
Задание:
Для решения задачи вам нужно ввести строки с помощью функций 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

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

Сформировать строку, состоящую из слов исходной строки, записанных наоборот C++
C++ Сформировать две строки - первая содержит только числа из исходной строки, а вторая – только слова
Составить строку, содержащую первые буквы из каждого слова заданного предложения C++
C++ Преобразовать строку так, чтобы буквы каждого слова были остортированы по возрастанию
C++ Для заданной строки построить строку, в которой содержаться только буквы латинского алфавита исходной строки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Игорь1986
34 / 98 / 24
Регистрация: 08.09.2014
Сообщений: 844
Завершенные тесты: 1
23.09.2015, 12:53     Сформировать строку, удалив из каждого слова исходной строки повторяющиеся в нем буквы #2
Вопрос 1 синтаксис #include <locale.h>; надо #include <locale.h>
Во вторых задержку экрана надо ставить чтоб не выпадала
makaroshka
2 / 2 / 0
Регистрация: 17.09.2013
Сообщений: 117
23.09.2015, 15:41  [ТС]     Сформировать строку, удалив из каждого слова исходной строки повторяющиеся в нем буквы #3
Не понял, синтаксис поправил, программа, просто крашится, как будто переполнение.
Игорь1986
34 / 98 / 24
Регистрация: 08.09.2014
Сообщений: 844
Завершенные тесты: 1
23.09.2015, 15:53     Сформировать строку, удалив из каждого слова исходной строки повторяющиеся в нем буквы #4
Отладчиком посмотри пошагово где падает
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1866 / 1662 / 579
Регистрация: 14.05.2014
Сообщений: 4,772
Записей в блоге: 1
Завершенные тесты: 5
23.09.2015, 17:09     Сформировать строку, удалив из каждого слова исходной строки повторяющиеся в нем буквы #5
Цитата Сообщение от makaroshka Посмотреть сообщение
C++
1
m[k] = *" ";
в программе так же или сюда неудачно выложили?

Добавлено через 1 час 8 минут
makaroshka, а зачем вы делаете через файл? Разве в задании об этом что-нибудь сказано?
makaroshka
2 / 2 / 0
Регистрация: 17.09.2013
Сообщений: 117
23.09.2015, 18:49  [ТС]     Сформировать строку, удалив из каждого слова исходной строки повторяющиеся в нем буквы #6
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
в программе так же или сюда неудачно выложили?
Так же
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2015, 13:00     Сформировать строку, удалив из каждого слова исходной строки повторяющиеся в нем буквы
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
makaroshka
2 / 2 / 0
Регистрация: 17.09.2013
Сообщений: 117
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;
}
Yandex
Объявления
30.09.2015, 13:00     Сформировать строку, удалив из каждого слова исходной строки повторяющиеся в нем буквы
Ответ Создать тему
Опции темы

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