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

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

12.10.2014, 20:57. Просмотров 642. Ответов 3
Метки нет (Все метки)

Доброго времени суток! Помогите пожалуйста решить задачу. Дана строка s, содержащая от 2 до 25 слов, в каждом из которых от 1 до 8
строчных латинских букв. Между соседними словами стоит не менее одного
пробела, за последним словом - точка. Напечатать те слова строки, которые
отличны от последнего слова и в слове нет повторяющихся букв.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2014, 20:57
Ответы с готовыми решениями:

Вывести те слова, которые отличаются от последнего слова и удовлетворяют условию, что в слове нет повторяющихся букв
Короче я сделал так #include <stdio.h> #include <ctype.h> #include...

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

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

Строки: Вывести на экран только те слова, которые отличаются от последнего и в которых нет повторяющихся букв.
вводи с клавиатуры строку. Вывести на экран только те слова, которые отлчаются...

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

3
daslex
1291 / 535 / 177
Регистрация: 02.08.2011
Сообщений: 2,756
13.10.2014, 03:38 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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#include <sstream>
#include <windows.h>
#include <algorithm>
#include <string>
#include <stack>
 
using namespace std;
 
bool my_pred(int i,int j){
 return (i==j);
}
 
int     main()
{
  setlocale(LC_ALL,"");
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
 
  stack<string> v;
  stringstream ss;
  string S,end_word;
 
  cout<<"Введи строку:\n   ";
  getline(cin,S);
 
  S.erase(remove_if(S.begin(),S.end(),::ispunct),S.end()); //Долой все знаки пунктуации
  reverse(S.begin(),S.end());                              //перевернул для поиска посл.слова
  ss<<S;
  ss>>end_word;                                             //вытащил посл.слово (перевернуто)
  reverse(end_word.begin(),end_word.end());                 //Получил посл слово в исходном виде
 
/*Запоминаем все слова в стеке*/
  do{
     ss>>S;
     reverse(S.begin(),S.end());
     v.push(S);
     S.clear();
  } while(ss);
 
/*Извлекаем слова согласно условию*/
  while (!v.empty()){
    S=v.top();
    sort(S.begin(),S.end());                        //Сортируем слово по буквам
    string::iterator it=unique(S.begin(),S.end());  //убираем из слова дубликаты символов
    S.resize(distance(S.begin(),it));               //Размер слова изменился
 
 
  if (v.top().size()==S.size() && (v.top()!=end_word)) //условие задачи
        cout<<v.top()<<"\n";//выводим подходящее слово
    v.pop();
  } //while
} //main
1
Миниатюры
Напечатать те слова данной строки, которые отличны от последнего слова, и в слове нет повторяющихся букв  
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
7056 / 3358 / 455
Регистрация: 04.12.2011
Сообщений: 9,343
Записей в блоге: 5
13.10.2014, 04:28 3
Как вариант:
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
#include <iostream>
#include <string.h>
using namespace std;
 
const int max_word_size = 8;
 
int is_repeat_ch(char *str){
while( *(str+1) )
if(strchr(str+1,*(str++))) return 1;
return 0;
}
 
char *get_next_word( char *str, char *buf ){
while(*(str) == ' ')str++;
char *iter_word_end = str;
while(*iter_word_end)
    if(*(iter_word_end++) == ' ')break;
strncpy( buf, str, iter_word_end - str );
buf[iter_word_end - str]=0;
return iter_word_end;
}
 
int main()
{
char buf[max_word_size + 1];
char *str = " mapa papa deda baba   mama Kuzya Dusya   dyadya mama.";
char *iter_str = str;
int count_word=0;
while(*iter_str){
iter_str = get_next_word(iter_str, buf);
count_word++;
}
 
char last_word[max_word_size + 1]={0};
strncpy(last_word, buf, strlen(buf)-1);
 
int count_word_prev=0;
iter_str = str;
 
while( *iter_str && count_word - count_word_prev - 1 ){
iter_str = get_next_word(iter_str, buf);
if(strcmp(buf, last_word) && !is_repeat_ch(buf)) cout<<buf<<endl;
count_word_prev++;
}
 
system("pause");
    return 0;
}
0
Nikotine
0 / 0 / 0
Регистрация: 11.10.2014
Сообщений: 2
13.10.2014, 13:43  [ТС] 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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
 
 
 
int main(int argc, const char * argv[]) 
{
   
    
    char input[250];
    gets(input);
    
    char s[25][10];
    for (int i = 0; i < 25; ++i) {
        s[i][0] = 0;
    };
    
    
    
    sscanf(input,
          "%9s %9s %9s %9s %9s %9s %9s %9s %9s %9s "
          "%9s %9s %9s %9s %9s %9s %9s %9s %9s %9s "
          "%9s %9s %9s %9s %9s", s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], s[8], s[9], s[10], s[11], s[12], s[13], s[14], s[15], s[16], s[17], s[18], s[19], s[20], s[21], s[22], s[23], s[24]);
    
    printf("You've entered the following words:\r\n");
    
    int last = 0;
    for (int i = 0; i < 25; ++i) {
        if (*s[i]) last = i;
        else break;
        printf("%s\r\n", s[i]);
    };
    int last_len = (int)strlen(s[last]) - 1;
    printf("last: %d; last_len: %d\r\n", last, last_len);
    
    printf("Macthed words: \r\n");
    bool matched = true;
    int len;
    for (int i = 0; i < last; ++i) {
        if (!strncmp(s[i], s[last], last_len)) continue;
        matched = true;
        len = strlen(s[i]);
        for (int j = 0; j < len; ++j) {
            for (int k = j + 1; k < len; ++k) {
                if (s[i][j] == s[i][k]) {
                    matched = false;
                    break;
                };
            };
            
            if (!matched) break;
        };
        
        if (matched) printf("%s\r\n", s[i]);
    };
    
    printf("Program finished.");
 
    
    return 0;
}
может кому тоже пригодится
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2014, 13:43

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

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

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


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

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

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