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

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

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

Устранение повторяющихся символов, чтобы остался только один. - C++

01.11.2011, 22:44. Просмотров 395. Ответов 8
Метки нет (Все метки)

Программа заключается в том, чтобы удалять повторяющиеся символы.
Помогите отредактировать программу, нужно добавить еще один цикл, не знаю какой, чтобы сдвигать строки при встречи повторяющихся символов.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<string.h>
#include<conio.h>
#include<stdio.h>
void main()
{
int i;
char S[100];
printf("vvedite stroku");
gets(S);
for(i=0;i<strlen(S);i++)            
if (S[i]==' ' && S[i+1]==' ');          \\куда-то сюда как я понимаю...
S[i]=S[i+1];
puts(S);
}
Что нужно добавить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2011, 22:44     Устранение повторяющихся символов, чтобы остался только один.
Посмотрите здесь:

выделить новую память new так, чтобы адрес остался прежним - C++
:) Добрый день. Использую выделение динам. памяти таким образом: Point = new TPoint ; Делаю вот что. Создаю массив объектов и...

Объединить массивы так, чтобы результирующий массив остался упорядоченным по возрастанию (убыванию) - C++
1.53) Даны два одномерных массива A и B размерности n, элементы которых упорядочены по возрастанию (убыванию). Объединить массивы так,...

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

Объединить эти массивы так, чтобы результирующий целочисленный массив D (размера NA + NB + NC) остался упорядоченным по убыванию. - C++
Даны три целочисленных массива A, B и C размера NA, NB, NC соответ-ственно, элементы которых упорядочены по убыванию. Объединить эти...

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

Указать индексы повторяющихся символов - C++
Сдвиг сделан, дубликаты удалены, а как найти индексы не могу понять... В примере использовал 10 вместо 100 чтоб проще было проверять...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Петррр
5943 / 3380 / 336
Регистрация: 28.10.2010
Сообщений: 5,926
01.11.2011, 22:56     Устранение повторяющихся символов, чтобы остался только один. #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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int exsist(const char *str, int pos, const char ch)
{
    int i;
    for(i = 0; i < pos; i++)
        if (str[i] == ch)
            return 1;
    return 0;
}
 
void erase(char *str, int pos)
{
    int i, len = strlen(str);
    for(i = pos; i < len; i++)
        str[i] = str[i + 1];
}
 
int main()
{
    const int n = 100;
    char str[100];
    int i, len;
    printf("Enter string: ");
    fgets(str, n, stdin);
    len = strlen(str);
    for(i = 0; i < len; i++)
        if (exsist(str, i, str[i]))
            erase(str, i);
    printf("\n%s\n", str);
    system("pause");
    return 0;
}
Deemk0
0 / 0 / 1
Регистрация: 01.11.2011
Сообщений: 18
01.11.2011, 23:01  [ТС]     Устранение повторяющихся символов, чтобы остался только один. #3
Спасибо
Я надеялся на какой-то простенький цикл в добавок к тому, что уже было, но наверное не бывает простых вещей
easybudda
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
01.11.2011, 23:12     Устранение повторяющихся символов, чтобы остался только один. #4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
 
#define STR_LEN 256
#define STR_MASK "%255[^\n]%*c"
 
int main(void){
    char buf[STR_LEN];
    
    while ( printf("String: ") > 0 && scanf(STR_MASK, buf) == 1 ){
        char * p = buf + 1;
        while ( *p ){
            if ( strchr(buf, *p) != p )
                memmove(p, p + 1, strlen(p));
            else
                ++p;
        }
        printf("Result: %s\n", buf);
    }
    
    return 0;
}
Holodov
5 / 5 / 0
Регистрация: 01.10.2011
Сообщений: 46
01.11.2011, 23:43     Устранение повторяющихся символов, чтобы остался только один. #5
easybudda, Не могли бы вы прокомментировать ваш код? Спасибо.
Deemk0
0 / 0 / 1
Регистрация: 01.11.2011
Сообщений: 18
02.11.2011, 00:11  [ТС]     Устранение повторяющихся символов, чтобы остался только один. #6
Ребят, а что добавить то все-таки ,чтобы он оставлял вместо нескольких пробелов только один? Вопрос к верхней программе, в самом начале
easybudda
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
02.11.2011, 00:28     Устранение повторяющихся символов, чтобы остался только один. #7
Цитата Сообщение от Holodov Посмотреть сообщение
Не могли бы вы прокомментировать ваш код?
Функция strchr() возвращает указатель на первое вхождение символа в строку. Начиная со второго символа в строке ищем его с начала строки и, если он найдётся раньше ( strchr(buf, *p) != p ), смещаем функцией memmove() все символы после него и завершающий ноль на один влево ( memmove(p, p + 1, strlen(p) ). Можно было бы написать чуть проще - strcpy(p, p + 1), и в большинстве случаев работало бы, но по стандарту поведение функции strcpy() не определено, если участки памяти пересекаются.
Байт
Эксперт C
15684 / 10011 / 1504
Регистрация: 24.12.2010
Сообщений: 18,815
02.11.2011, 01:28     Устранение повторяющихся символов, чтобы остался только один. #8
Глянь сюда
Заменить в последовательности каждую из групп стоящих рядом точек одной точкой
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2011, 15:24     Устранение повторяющихся символов, чтобы остался только один.
Еще ссылки по теме:

Удаление повторяющихся символов из строки - C++
Необходимо написать функцию delete_repeats, которая удаляет все повторяюшиеся символы из строки. например: Only three more lessons...

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

Удаление из строки повторяющихся символов - C++
Например Ввод: ABBGBAZ Вывод: ABGZ

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


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

Или воспользуйтесь поиском по форуму:
Deemk0
0 / 0 / 1
Регистрация: 01.11.2011
Сообщений: 18
07.11.2011, 15:24  [ТС]     Устранение повторяющихся символов, чтобы остался только один. #9
Разобрался, что нужно вставить : быть может кому-то и пригодиться :

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<string.h>
#include<conio.h>
#include<stdio.h>
void main()
{
int i,j;
char S[100];
clrscr();
printf("vvedite stroku");
gets(S);
for(i=0;i<strlen(S);i++)
if (S[i]==' ' && S[i+1]==' ')
{for(j=i;j<strlen(S);j++)
S[j]=S[j+1];
i--;}
puts(S);
getch();
}
а чтобы просто удалить все пробелы убираем в строке if (S[i]==' ' && S[i+1]==' ') ,&& S[i+1]==' ') ,
то есть if (S[i]==' ')
Yandex
Объявления
07.11.2011, 15:24     Устранение повторяющихся символов, чтобы остался только один.
Ответ Создать тему
Опции темы

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