Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
makaroshka
2 / 2 / 0
Регистрация: 17.09.2013
Сообщений: 135
#1

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

23.09.2015, 12:28. Просмотров 421. Ответов 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
Ответы с готовыми решениями:

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

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

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

Из символов исходной строки сформировать новую строку начинающуюся и оканчивающуюся на заданные буквы
Помогите пожалуйста решить задачу , не могу понять как это решить. Задача :...

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

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

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

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

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

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


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

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

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