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

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

Восстановить пароль Регистрация
 
HyPuK
4 / 4 / 1
Регистрация: 24.01.2013
Сообщений: 76
24.01.2013, 18:39     Вывести те слова, которые отличаются от последнего слова и удовлетворяют условию, что в слове нет повторяющихся букв #1
Короче я сделал так
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
68
69
70
71
72
73
74
75
76
77
78
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
void main()
{
int const N=25;
char line[80];
char line1[80];
char line2[80];
 
int r=0,j=0,k=0,t=0,L;
int l=0;
char wrd[80][80];
int length[80];
 
printf("enter a string \n");
gets(line);
puts(line);
L=strlen(line);
printf("number of digits=%d\n",L);
 
 
//Разбиваем строку на слова
for (int i=0;i<L;i++)
{
    while (isalnum(line[i]) )
    {
            wrd[j][k]=line[i];
            k++;i++;
            wrd[j][k]=0;
            length[j]=k;
    }
    r=j;
    j++;
    k=0;
}
 
for (j=0;j<r;j++)
{
    for (k=0;k<l;k++)
        {
        if (wrd[j][k]==wrd[r][k])
        {
            t++;  
        }
        if (l==t)   
        {
            
                printf("Ura \n"); 
            l=length[j];      // длина слова
            for (k=0;k<l;k++)
                {
                    if (wrd[j][k]==wrd[j][l])    //последняя буква == данной букве,
                        {
                        wrd[j][k]=wrd[j+1][k];   //тогда это слово убираем и вставляем следующее
                        j--; r--;  break;        //j снижаем, т.к поставили след.слово на +1 ближе
                        }
                }
            t=0;
        }
        
    }
 
}
printf("--------------\n"); 
for (j=0; j<r; j++)
    {
        l=length[j];
    for (k=0;k<l; k++) 
        {
        printf("%c",wrd[j][k]);
        }
     printf("\n"); 
    
    }
printf("--------------\n");
}
ввожу "one two three two one"
должен получить "two two" т.к первое = последнему, и в 3 слове есть повторяющиеся буквы, но!
получаю "one two three two"

Думаю что надо копать вот это:
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
for (j=0;j<r;j++)
{
    for (k=0;k<l;k++)
        {
        if (wrd[j][k]==wrd[r][k])
        {
            t++;  
        }
        if (l==t)   
        {
            
                printf("Ura \n"); 
            l=length[j];      // длина слова
            for (k=0;k<l;k++)
                {
                    if (wrd[j][k]==wrd[j][l])    //последняя буква == данной букве,
                        {
                        wrd[j][k]=wrd[j+1][k];   //тогда это слово убираем и вставляем следующее
                        j--; r--;  break;        //j снижаем, т.к поставили след.слово на +1 ближе
                        }
                }
            t=0;
        }
        
    }
 
}
Я думаю что проблема в сравнении массивов, но сам не могу найти. Можете помочь?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2013, 18:39     Вывести те слова, которые отличаются от последнего слова и удовлетворяют условию, что в слове нет повторяющихся букв
Посмотрите здесь:

Вывести слова, в которых нет повторяющихся букв и буквы слова упорядочены по алфавиту C++
C++ найти и вывести на экран слова, в которых нет повторяющихся букв
C++ [C++] Напечатать те слова строки, где в слове нет повторяющихся букв
C++ Строки: Вывести на экран только те слова, которые отличаются от последнего и в которых нет повторяющихся букв.
Строка: напечатать слова, которые удовлетворяют следующему свойству: в слове нет повторяющихся букв C++
C++ Вывести слова, в которых нет повторяющихся букв
Напечатать те слова данной строки, которые отличны от последнего слова, и в слове нет повторяющихся букв C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
26.01.2013, 00:06     Вывести те слова, которые отличаются от последнего слова и удовлетворяют условию, что в слове нет повторяющихся букв #2
HyPuK, вот, конечно не супер, но вот:

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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// new1.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
 
void main()
{
    char *str, *str1, *str2;
    str = new char[255];
    cout << "Enter the string: ";
        cin.getline(str, 255, '\n');
 
    cout << "Your string: ";
        cout << str << endl;;
 
    int size = strlen(str) + 1, k = 0;
    for(int i = size-1; i >=0; i--)
    {
        k++;
        if(str[i] == ' ')
        {
            k--;
            str1 = new char[k];
            for(int j = size; j > i; j--, k--)
            {
                str1[k] = str[j];
            }
            break;
        }
    }
 
    bool flag;
    int kol = 0, size3 = size-strlen(str1);
    for(int i = 0; i < size3; i++)
    {
        flag = false; 
        if(str[i] == ' ')
        {
            int size2 = i - kol;
            str2 = new char[size2];
            for(int j = kol, j1 = 0; j < i; j++, j1++)
            {
                str2[j1] = str[j];
            }
 
            str2[size2] = '\0';
 
            int size1 = strlen(str2)+1;
            for(int s = 0; s < size1; s++)
            {
                for(int s1 = s+1; s1 < size1; s1++)
                {
                    if(str2[s] != str2[s1])
                        flag = true;
                    else
                    {
                        flag = false;
                        break;
                    }
                }
 
                if(flag == false)
                    break;
            }
 
 
            kol = i+1;
        }
        
        if(flag == true)
        {
            if(strcmp(str1, str2) != 0)
                cout << str2 << endl;
        }
    }
 
    cout << "\n\n"; 
}
HyPuK
4 / 4 / 1
Регистрация: 24.01.2013
Сообщений: 76
31.01.2013, 17:46  [ТС]     Вывести те слова, которые отличаются от последнего слова и удовлетворяют условию, что в слове нет повторяющихся букв #3
yoghurt92, Большое спасибо, что не пожалели время и написали мне программу, но я не умею пока что работать с #include <iostream>, по этому не могу понять вам код.

Я сам сделал но работает не корректно
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
void main()
{
 
char line[80]="Visual Studio is a suite of component based development tools!  suite !!!"; //Visual Studio представлет собой набор компонентов на основе инструментов разработки//
int r=0,j=0,l=0,i=0,k=0,L;
char wrd[20][80], length[80];        //массив для длин слов (array of word lengths)
 
/*printf("Enter a string \n"); gets(line);*/
 
printf("-----------------------------------------------\n");
printf("Basic line is: "); puts(line);
 
printf("-----------------------------------------------\n");
L=strlen(line);
printf("Number of all digits=%d\n",L);
 
//Оставляем только буквы в конце строки
while (L-->0)
    {
    if (isalpha(line[L]) ) break;
    }
 
 
//Разбиваем строку на слова (Splitting a string into words)
while(i<L)
{
    while (!isalnum(line[i])) i++;
    while (isalnum(line[i]))
    {
            wrd[j][k]=line[i];
            k++;
            i++;
    }
    wrd[j][k]='\0';
    length[j]=k;
    r=j; 
    k=0;
    j++;
}
 
 
// Оставляем те слова, которые отличаются от последнего слова (We reserve the words that are different from the last word)
for (j=0;j<r;j++)
    {
        if (strcmp(wrd[j],wrd[r])==0) 
            {   
            for (j;j<r;j++)
                {    
                strcpy(wrd[j],wrd[j+1]);
                /*length[j]=length[j+1];
                wrd[j]= wrd[j+1];*/ 
                }
            j=0;r--;
            }
    }
 
    //Проверяем слова на повторение букв в слове (Check words to repeat the letters in the word)
    for (int j=0;j<r;j++)
        {
        if (strcmp(wrd[j],wrd[r])!=0) 
            { 
            l=length[j]-1;                                       // длина слова (number of digits/word length)
            for (int k=0;k<l;k++)
                {
                    for (int n=1;n<=l;n++)
                    {
                    if ((wrd[j][k]==wrd[j][n]) & (n!=k))        
                        {
                            for (j;j<r;j++)
                            {  
                                length[j]=length[j+1];
                                l=length[j];
                                strcpy(wrd[j],wrd[j+1]); 
                                           /*for(int k=0;k<l;k++)
                                           {   wrd[j][k]= wrd[j+1][k];
                                           wrd[j][k+1]=0; }*/
                            }
                            j=0;r--;      
                       }
                    }
                }
            }
        }
 
printf("-----------------------------------------------\n");
 
printf("Sorting of words which don't coincide \nwith the last word and have no in the \nword of repeating letters:\n\n");
//Выход [Ответ] (output)
for (j=0; j<r; j++)
    {                                    
        puts(wrd[j]);           //printf("%s\n",wrd[j]);
    }
 
printf("-----------------------------------------------\n");
}
Ошибка вот здесь! :
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
for (int j=0;j<r;j++)
        {
        if (strcmp(wrd[j],wrd[r])!=0) 
            { 
            l=length[j]-1;                                       
            for (int k=0;k<l;k++)
                {
                    for (int n=1;n<=l;n++)
                    {
                    if ((wrd[j][k]==wrd[j][n]) & (n!=k))        
                        {
                            for (j;j<r;j++)
                            {  
                                length[j]=length[j+1];
                                l=length[j];
                                strcpy(wrd[j],wrd[j+1]); 
                                           /*for(int k=0;k<l;k++)
                                           {   wrd[j][k]= wrd[j+1][k];
                                           wrd[j][k+1]=0; }*/
                            }
                            j=0;r--;      
                       }
                    }
                }
            }
        }
Может кто-нибудь что-либо предложить?

Добавлено через 58 минут
Короче ребята я нашел решение!
Вот
Кликните здесь для просмотра всего текста
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
void main()
{
 
char line[80]="Visual Studio is a suite %of component* based development tools!  Studio !!!"; //Visual Studio представлет собой набор компонентов на основе инструментов разработки//
int r=0,j=0,l=0,i=0,k=0,L;
char wrd[20][80], length[80];        //массив для длин слов (array of word lengths)
 
/*printf("Enter a string \n"); gets(line);*/
 
printf("-----------------------------------------------\n");
printf("Basic line is: "); puts(line);
 
printf("-----------------------------------------------\n");
L=strlen(line);
printf("Number of all digits=%d\n",L);
 
//Оставляем только буквы в конце строки
while (L-->0)
    {
    if (isalpha(line[L]) ) break;
    }
 
 
//Разбиваем строку на слова (Splitting a string into words)
while(i<L)
{
    while (!isalnum(line[i])) i++;
    while (isalnum(line[i]))
    {
            wrd[j][k]=line[i];
            k++;
            i++;
    }
    wrd[j][k]='\0';
    length[j]=k;
    r=j; 
    k=0;
    j++;
}
 
 
// Оставляем те слова, которые отличаются от последнего слова (We reserve the words that are different from the last word)
for (j=0;j<r;j++)
    {
        if (strcmp(wrd[j],wrd[r])==0) 
            {   
            for (j;j<r;j++)
                {    
                strcpy(wrd[j],wrd[j+1]);
                length[j]=length[j+1];
                /*wrd[j]= wrd[j+1];*/   
                }
            j=0;r--;
            }
    }
 
    //Проверяем слова на повторение букв в слове (Check words to repeat the letters in the word)
    for (int j=0;j<r;j++)
        {
        if (strcmp(wrd[j],wrd[r])!=0) 
            { 
            l=length[j]-1;                                       // длина слова (number of digits/word length)
            for (int k=0;k<l;k++)
                {
                    for (int n=1;n<=l;n++)
                    {
                    if ((wrd[j][k]==wrd[j][n]) & (n!=k))        
                        {
                            for (j;j<r;j++)
                            {  
                                length[j]=length[j+1];
                                l=length[j];
                                strcpy(wrd[j],wrd[j+1]); 
                                           /*for(int k=0;k<l;k++)
                                           {   wrd[j][k]= wrd[j+1][k];
                                           wrd[j][k+1]=0; }*/
                            }
                            j=0;r--;      
                       }
                    }
                }
            }
        }
 
printf("-----------------------------------------------\n");
 
printf("Sorting of words which don't coincide \nwith the last word and have no in the \nword of repeating letters:\n\n");
//Выход [Ответ] (output)
for (j=0; j<r; j++)
    {                                    
        puts(wrd[j]);           //printf("%s\n",wrd[j]);
    }
 
printf("-----------------------------------------------\n");
}
Yandex
Объявления
31.01.2013, 17:46     Вывести те слова, которые отличаются от последнего слова и удовлетворяют условию, что в слове нет повторяющихся букв
Ответ Создать тему
Опции темы

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