0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
1

Вывести те слова, которые отличаются от последнего слова и удовлетворяют условию

14.02.2016, 21:25. Показов 1893. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дана строка длиной n символов, содержащая слова, т.е. группы
символов, разделенные пробелами и другими разделителями (знаками
препинания) и не содержащие пробелов внутри себя.
Задание:Вывести те слова, которые отличаются от последнего слова и
удовлетворяют условию, что в слове нет повторяющихся букв.
Помогите пожалуйста
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.02.2016, 21:25
Ответы с готовыми решениями:

Вывести те слова, которые отличаются от последнего слова и удовлетворяют условию
Помогите,пожалуйста,написать программу. Дана строка длиной n символов, содержащая слова, т.е....

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

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

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

11
738 / 543 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
16.02.2016, 13:06 2
Rita87,
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
#include <stdio.h>
#include <string.h>
 
int main()
{
    int i, j, flag = 0, len;
    char str_last[20], *str_now, str2[99];
    char str[99] = "So close no heart matter howw far,Couldn't heart be much heart more from the heart";
    char sep[10] = " ,  ";
    char *istr;
    strcpy(str2, str);
    printf("Source string: %s\n", str);
    printf("Result:\n");
    istr = strtok(str, sep);
    while(istr != NULL){
        strcpy(str_last, istr);
        istr = strtok(NULL, sep);
    }
    istr = strtok(str2, sep);
    remove(str);
    while(istr != NULL){
        str_now = istr;
        len = strlen(str_now);
        if(0 != strcmp(str_now, str_last)){
            for(i = 0; i < len; ++i){
                for(j = 0; j < len; ++j){
                    if(str_now[i] == str_now[j] && i != j)
                        flag = 1;
                }
            }
            if(flag == 0)
                printf("%s\n", str_now);
                flag = 0;
        }
        istr = strtok(NULL, sep);
    }
    return 0;
}
1
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
16.02.2016, 17:45  [ТС] 3
Спасибо! А можно ли сделать так, чтобы слова рандомно выдавались?

Добавлено через 50 секунд
Спасибо! А можно ли сделать так, чтобы слова рандомно выдавались?
0
738 / 543 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
16.02.2016, 20:59 4
Цитата Сообщение от Rita87 Посмотреть сообщение
Спасибо! А можно ли сделать так, чтобы слова рандомно выдавались?
Если слова только из букафф,то пробел не рандомный, а через равные промежутки.Повторяющиеся буквы я для наглядности вывел в каких словах имелись.Проверка на совпадение с последним словом сработала только в самом конце,когда оно встретило свою копию.
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const int N = 1022;
int main()
{
    int i, j, x = 0, flag = 0, len;
    char str_last[20], *str_now, str2[N];
    char str[N];
    char sep[10] = " ,  ";
    char *istr;
    for(i = 0; i < N; ++i){
        if(i == N - 1)
            str[i] = '\0';
        else
            if(i % 5 ==0 && i > 0)
                str[i] = ' ';
            else
                str[i] = rand()%26 + 97;
       
    }
    strcpy(str2, str);
    printf("Source string: %s\n", str);
    printf("Result:\n");
    istr = strtok(str, sep);
    while(istr != NULL){
        strcpy(str_last, istr);
        istr = strtok(NULL, sep);
    }
    istr = strtok(str2, sep);
    remove(str);
    while(istr != NULL){
        str_now = istr;
        ++x;
        len = strlen(str_now);
        if(0 != strcmp(str_now, str_last)){
            for(i = 0; i < len; ++i){
                for(j = 0; j < len; ++j){
                    if(str_now[i] == str_now[j] && i != j){
                        flag = 1;
                        printf("Repeating letters in element %d\n", x);
                    }
                }
            }
            if(flag == 0)
                printf("%s\n", str_now);
                flag = 0;
        }
        else
            printf("Repeating words\n");
        istr = strtok(NULL, sep);
    }
    return 0;
}
1
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
16.02.2016, 21:16  [ТС] 5
Серьезность Код Описание Проект Файл Строка
Ошибка C4996 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. ConsoleApplication93 c:\users\hp-pavilion\documents\visual studio 2015\projects\consoleapplication93\consoleapplication93\consoleapplication93.cpp 26


как исправить эту ошибку?
0
738 / 543 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
17.02.2016, 04:40 6
Rita87,
ругается на функцию strcpy,рекомендует использовать strcpy_s.Попробуйте заменить в коде одну на другую, с соблюдением синтаксиса разумеется.В моей среде всё летает:
Миниатюры
Вывести те слова, которые отличаются от последнего слова и удовлетворяют условию   Вывести те слова, которые отличаются от последнего слова и удовлетворяют условию  
1
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
17.02.2016, 21:48  [ТС] 7
Исправила. Теперь выходит это:Серьезность Код Описание Проект Файл Строка
Ошибка C4996 'strtok': This function or variable may be unsafe. Consider using strtok_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. ConsoleApplication94 c:\users\hp-pavilion\documents\visual studio 2015\projects\consoleapplication94\consoleapplication94\consoleapplication94.cpp 26


А при исправлении на strtok_s выходит еще 8 других.. Что делать?
0
738 / 543 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
18.02.2016, 07:06 8
Rita87, Вообще-то и strcpy и strtok это стандартные функции языка Си,не понимаю что вашему компилятору не нравится.У вас ведь Visual studio ? Я эту среду совсем не знаю,может подскажет кто?

Добавлено через 2 минуты
Там еще написано: Чтобы отключить Deprecation, использовать _CRT_SECURE_NO_WARNINGS.
0
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
18.02.2016, 17:53  [ТС] 9
LFC, А как это использовать? И не могли бы вы объяснить в кратце хотя бы что программа делает поэтапно? не совсем понятно
0
738 / 543 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
18.02.2016, 20:21 10
Лучший ответ Сообщение было отмечено Rita87 как решение

Решение

Цитата Сообщение от Rita87 Посмотреть сообщение
А как это использовать?
затрудняюсь сказать,я с Visual studio не знаком
Цитата Сообщение от Rita87 Посмотреть сообщение
И не могли бы вы объяснить в кратце хотя бы что программа делает поэтапно?
слегка подправил код
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const int N = 1022;//изменяя эту цифру,меняем размер строки,попробуйте уменьшить
                    //например до 100,может из-за нехватки памяти проблемы
int main()
{
     int i, j, x = 0, flag = 0, len;//len - длина слова
    char str_last[20], *str_now, str2[N];//str_last - последнее слово, str_now - текущее слово
    char str[N];  //str[N] - текущая строка,str2[N] - копия текущей строки
    char sep[10] = " ,  ";//строка символов-разделителей(пробел,запятая,табуляция)
    char *istr;
    for(i = 0; i < N; ++i){
        if(i == N - 1) //в конце строки
            str[i] = '\0';// ставим нулевой символ(если кто не в курсе,то именно наличием нулевого 
        else              //символа в самом конце строка отличается от просто массива)
            if(i % 5 ==0 && i > 0)//через каждые 5 символов печатаем пробел(число 5 выбрано произвольно)
                str[i] = ' ';
            else
                str[i] = rand()%26 + 97;//остальные элементы заполняем буквами(только англ.маленькие)
    }
    strcpy(str2, str);//получившуюся строку str копируем в str2(функция strtok разрушает исходную
                      //строку)поэтому разбивать на слова будем ее копию с последующим удалением
    printf("Source string:\n %s\n", str);//печатаем исходную строку
    printf("Result:\n");
    istr = strtok(str2, sep);//находим первое слово и записываем его в istr
    while(istr != NULL){
        strcpy(str_last, istr);//в цикле каждое найденное слово копируем в str_last,каждый раз
        istr = strtok(NULL, sep);//стирая предыдущее,т.о. останется только последнее слово
    }
    remove(str2);//стираем остатки копии исходной строки,т.к. она уже разрушена
    istr = strtok(str, sep);//повторяем разбивку исходной строки на слова
    while(istr != NULL){
        str_now = istr;//находим текущее слово
        ++x;//счетчик слов увеличивается на 1
        len = strlen(str_now);//узнаем длину текущего слова
        if(0 != strcmp(str_now, str_last)){//сравниваем текущее слово с последним,если они не
            for(i = 0; i < len; ++i){      //одинаковы,то сравниваем символы внутри текущего
                for(j = 0; j < len; ++j){  //слова
                    if(str_now[i] == str_now[j] && i != j){//если находим повторяющиеся символы
                        flag = 1;//поднимаем флаг
                        printf("Repeating letters in element %d\n", x);//и печатаем номер этого
                    }            //слова просто для наглядности(можно и не печатать,тогда и
                }         //переменную х можно не использовать совсем)
            }
            if(flag == 0)//если флаг опущен,значит повторяющиеся символы внутри текущего слова
                printf("%s\n", str_now);//не найдены,печатаем текущее слово
            flag = 0;//если флаг был поднят-опускаем его
        }
        else//иначе,если текущее слово совпадает с последним словом
            printf("Repeating words\n");//печатаем уведомление о повторяющихся словах
        istr = strtok(NULL, sep);//продолжаем разбивать строку на слова,пока она не кончится
    }
    return 0;
}
Добавлено через 55 минут
Скачайте себе Code::Blocks и не мучайтесь.
1
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
18.02.2016, 21:55  [ТС] 11
А это точно на С, а не на С++?
0
738 / 543 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
19.02.2016, 06:37 12
Цитата Сообщение от Rita87 Посмотреть сообщение
А это точно на С, а не на С++?
0
19.02.2016, 06:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.02.2016, 06:37
Помогаю со студенческими работами здесь

Теперь нужно вывести те слова, которые отличаются от последнего слова
;)Пол программы есть - получена строка слов. Теперь нужно вывести те, которые отличаются от...

Вывести те слова предложения, которые отличны от последнего слова предложения и удовлетворяют следующему свойству:
C помощью текстового редактора создать файл, содержащий текст не более 10 строк, длина строки...

Вывести те слова предложения, которые отличны от последнего слова предложения и удовлетворяют следующему свойству:
C помощью текстового редактора создать файл, содержащий текст не более 10 строк, длина строки...

Вывести те слова предложения, которые отличны от последнего слова предложения и удовлетворяют следующему свойству:
C помощью текстового редактора создать файл, содержащий текст не более 10 строк, длина строки...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru