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

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

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

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

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

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

Тестовые файлы: преобразовать строку, удалив из нее все четырехбуквенные слова C++
C++ Вывести все слова текста, которые отличны от последнего слова, предварительно преобразовав их
C++ Распечатать введенную строку, удалив из неё слова с нечетными номерами и перевернув слова с четными номерами
C++ Вывести массив, предварительно удалив элементы меньшие среднего арифметического
Распечатать введенную строку, удалив из неё слова с нечетными номерами и добавив перевернутое слово к слову с четными номерами. C++
Дана строка, содержащая текст. Вывести все слова, повторяющиеся более трех раз. C++
ООП. Напечатать слова, отличные от последнего слова, предварительно преобразовав каждое из них по правилу C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Василий-Робот
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;
}
Как это исправить?
~AuthoR~
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 26
12.12.2010, 16:22  [ТС]     Вывести строку, удалив предварительно повторяющиеся слова #3
Несовместимые типы значений, хм... надо подумать
Василий-Робот
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;
}
asics
Freelance
Эксперт C++
 Аватар для asics
2842 / 1779 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
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;
}
asics
Freelance
Эксперт C++
 Аватар для asics
2842 / 1779 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
12.12.2010, 22:11     Вывести строку, удалив предварительно повторяющиеся слова #6
Василий-Робот, Вот результат роботы вашей програмы(см.скрин), и вы считаете это привильным решением задачи ?
Миниатюры
Вывести строку, удалив предварительно повторяющиеся слова  
~AuthoR~
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 26
12.12.2010, 22:19  [ТС]     Вывести строку, удалив предварительно повторяющиеся слова #7
Да, спасибо огромное)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2010, 22:26     Вывести строку, удалив предварительно повторяющиеся слова
Еще ссылки по теме:

Записать в файл слова отличные от последнего предварительно удаляя первые буквы из каждого слова C++
Сформировать строку, удалив из каждого слова исходной строки повторяющиеся в нем буквы C++
Вывести на экран строку, удалив символы, которые не являются буквами C++
C++ Вывести повторяющиеся слова
C++ Преобразовать строку, удалив пробелы, и разделить слова одиночной "звёздочкой"

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

Или воспользуйтесь поиском по форуму:
Василий-Робот
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;
}
Миниатюры
Вывести строку, удалив предварительно повторяющиеся слова   Вывести строку, удалив предварительно повторяющиеся слова  
Yandex
Объявления
12.12.2010, 22:26     Вывести строку, удалив предварительно повторяющиеся слова
Ответ Создать тему
Опции темы

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