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

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

Войти
Регистрация
Восстановить пароль
 
~AuthoR~
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 26
#1

Вывести строку, удалив предварительно повторяющиеся слова - C++

12.12.2010, 13:44. Просмотров 678. Ответов 7
Метки нет (Все метки)

Ввести строку. Вывести её, удалив предварительно повторяющиеся слова.
Очень нужна помощь!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2010, 13:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывести строку, удалив предварительно повторяющиеся слова (C++):

Сформировать строку, удалив из каждого слова исходной строки повторяющиеся в нем буквы - C++
Задание: Для решения задачи вам нужно ввести строки с помощью функций gets или fgets, разбить строку на слова и выбрать нужные (функция...

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

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

Вывести массив, предварительно удалив элементы меньшие среднего арифметического - C++
Необходимо ввести массив вещественных чисел и вывести его, предварительно удалив элементы меньшие среднего арифметического. Буду...

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

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

7
Василий-Робот
TECHNO
26 / 26 / 5
Регистрация: 04.11.2009
Сообщений: 366
12.12.2010, 15:43 #2
Вот код
Идея такая: найти количество слов в строке и каждое слово засунуть в строковый массив и уже там удалять ненужные нам слова
Проблема в строке 23 incompatible types in assignment of `char*' to `char**[100]'
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
#include <conio.h>
#include <stdio.h>
#include <string.h>
int main()
{
    char st1[100],st2[100];
    gets(st1);
    char *p,*d;
    int k=0;
    strcpy(st2,st1);
    p=strtok(st1," ");
    while(p!=NULL)
    {
            p=strtok(NULL," ");
            k++;
    }
    printf("%d",k);
    char **M[k][100];
    d=strtok(st2," ");
    for(int i=0;i<k;i++)
    {
            d=strtok(NULL," ");
            M[i]=d;      
    }
    for(int i=0;i<k;i++)
    printf("%c\n",M[i]);
    getch(); 
    return 0;
}
Как это исправить?
0
~AuthoR~
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 26
12.12.2010, 16:22  [ТС] #3
Несовместимые типы значений, хм... надо подумать
0
Василий-Робот
TECHNO
26 / 26 / 5
Регистрация: 04.11.2009
Сообщений: 366
12.12.2010, 21:59 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
КОД:
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
#include <conio.h>
#include <stdio.h>
#include <string.h>
int main()
{
    char st1[100],st2[100],st3[100];
    gets(st1);
    char *p,*d;
    int k=0;
    strcpy(st2,st1);
    strcpy(st3,st2);
    p=strtok(st1," ");
    while(p!=NULL)
    {
            p=strtok(NULL," ");
            k++;
    }
    char M[k][100];
    d=strtok(st2," ");
    strcpy(M[0],d);
    for(int i=1;i<k;i++)
    {
            d=strtok(NULL," ");    
            strcpy(M[i],d);
    }
    printf("\n");
    int B[k],C[k];
    for (int i=0;i<k-1;i++)
    for (int j=i+1;j<k+1;j++)
    if(strcmp(M[j],M[i])==0) {B[i]=j; break;}
    printf("\n");
    puts(st3);
    for (int j=0;j<k;j++)
    for (int i=0;i<k;i++)
    if(j==B[i]) {C[j]=0; break;} 
    for (int j=0;j<k;j++)
    if(C[j]!=0) printf("%s ",M[j]);
    getch(); 
    return 0;
}
0
asics
Freelance
Эксперт С++
2850 / 1785 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
12.12.2010, 22:06 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
 
int main()
{
    std::string str;
    std::cout << "Input string: ";
    std::getline(std::cin, str);
    std::istringstream ist(str);
    std::vector<std::string> vec, _vec;
 
    while(ist >> str)
        vec.push_back(str);
 
    bool key;
    int i = 0, j = 0;
    for(i = 0; i < vec.size(); ++i)
    {
        key = true;
        for(j = 0; j < vec.size(); ++j)
            if(i != j && vec[i] == vec[j])
                key = false;
 
        if(key)
            _vec.push_back(vec[i]);
    }
    std::cout << "\n-> ";
    for(int i = 0; i < _vec.size(); ++i)
        std::cout << _vec[i] << ' ';
 
    return 0;
}
1
asics
Freelance
Эксперт С++
2850 / 1785 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
12.12.2010, 22:11 #6
Василий-Робот, Вот результат роботы вашей програмы(см.скрин), и вы считаете это привильным решением задачи ?
0
Миниатюры
Вывести строку, удалив предварительно повторяющиеся слова  
~AuthoR~
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 26
12.12.2010, 22:19  [ТС] #7
Да, спасибо огромное)
0
Василий-Робот
TECHNO
26 / 26 / 5
Регистрация: 04.11.2009
Сообщений: 366
12.12.2010, 22:26 #8
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
asics, я тщательно вбил все твои wtf
Вот мой скрин, странно что они не совпадают
единственный глюк моей программы, что если первое слово имеет клона то и первое слово уйдет. Сейчас я это исправлю

А вот и исправленный код:
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
#include <conio.h>
#include <stdio.h>
#include <string.h>
int main()
{
    char st1[100],st2[100],st3[100];
    gets(st1);
    char *p,*d;
    int k=0;
    strcpy(st2,st1);
    strcpy(st3,st2);
    p=strtok(st1," ");
    while(p!=NULL)
    {
            p=strtok(NULL," ");
            k++;
    }
    char M[k][100];
    d=strtok(st2," ");
    strcpy(M[0],d);
    for(int i=1;i<k;i++)
    {
            d=strtok(NULL," ");    
            strcpy(M[i],d);
    }
    printf("\n");
    int B[k],C[k];
    for (int i=0;i<k-1;i++)
    for (int j=i+1;j<k+1;j++)
    if(strcmp(M[j],M[i])==0) {B[i]=j; break;}
    printf("\n");
    for(int i=0;i<k;i++)
    if(B[i]==0) B[i]=k+1;
    puts(st3);
    for (int j=0;j<k;j++)
    for (int i=0;i<k;i++)
    {
    if(j==B[i]) {C[j]=0; break;} 
    }
    for (int j=0;j<k;j++)
    if(C[j]!=0) printf("%s ",M[j]);
    getch(); 
    return 0;
}
1
Миниатюры
Вывести строку, удалив предварительно повторяющиеся слова   Вывести строку, удалив предварительно повторяющиеся слова  
12.12.2010, 22:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2010, 22:26
Привет! Вот еще темы с ответами:

Распечатать введенную строку, удалив из неё слова с нечетными номерами и перевернув слова с четными номерами - C++
Задача 28. Распечатать строку, которая получается из введенной строки следующим образом: каждая цифра заменяется на заключенную в круглые...

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

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

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


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

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

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