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

Вывести все слова, отличные от последнего слова

15.04.2016, 22:35. Показов 2565. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет, задание на работу со строками такое: Вывести все слова, отличные от последнего слова, предварительно удалив из слов нечетной длины среднюю букву.
Будьте так любезны, помогите написать ибо я вообще не понимаю как это сделать. Заранее благодарю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.04.2016, 22:35
Ответы с готовыми решениями:

Создать новый файл, содержащий все слова, отличные от последнего слова
Дан текстовый файл, содержащий последовательность слов. Между соседними словами – запятая, за...

Создать новый файл, содержащий все слова, отличные от последнего слова
Дан текстовый файл, содержащий последовательность слов. Между соседними словами – запятая, за...

Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них
Здравствуйте. Помогите пожалуйста написать прогу. Требуется написать функцию обработки строки и...

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

11
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12835 / 7571 / 1765
Регистрация: 25.07.2009
Сообщений: 13,968
16.04.2016, 11:28 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
#include <stdio.h>
#include <string.h>
 
char * exclude_middle_if_odd_len(char * s) {
    size_t len = strlen(s);
    if ( len & 1 )
        memmove(s + len / 2, s + len / 2 + 1, len / 2 + 1);
    
    return s;
}
 
void smart_print(char * s) {
    printf("%s ", exclude_middle_if_odd_len(s));
}
 
char * process_but_last(char * s, const char * delim, void (*func)(char *)) {
    if ( ( s = strtok(s, delim) ) != NULL ) {
        char * last = process_but_last(NULL, delim, func);
        if ( ! last )
            return s;
            
        if ( strcmp(s, last) )
            func(s);
        
        return last;
    }
    else
        return NULL;
}
 
#define DELIM " \t\n"
 
int main(void) {
    char buf[BUFSIZ];
    
    while ( printf("\nString: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' )
        process_but_last(buf, DELIM, smart_print);
    
    return 0;
}
0
0 / 0 / 0
Регистрация: 15.04.2016
Сообщений: 30
04.05.2016, 08:02  [ТС] 3
Я не могу понять, как работает ваша программа.
Цитата Сообщение от easybudda Посмотреть сообщение
Слова, правда, в обратном порядке печатает, за то по-своему забавно...
0
838 / 641 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
09.05.2016, 21:37 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
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define DELIM " \t\n.,;:!?"
 
struct stack {
    const char*   ptr;
    struct stack* next;
};
int  stack_push(struct stack** st, const char* ptr);
void stack_clear(struct stack* st);
 
 
int main(void){
    size_t n;
    char*  p;
    struct stack* i, *st = NULL;
 
    char   s[] = "XXZXX, XXAXX, ABC, XXXX, ABCDEF, MMMM, XXQXX, XXWXX";
 
    for(p = strtok(s, DELIM); p != NULL; p = strtok(NULL, DELIM)){
        n = strlen(p);
        if((n > 2) && (n & 1)){
            n >>= 1;
            strcpy(p + n, p + (n + 1));
        }
        stack_push(&st, p);
    }
 
    if(st != NULL){
        for(i = st->next; i != NULL; i = i->next){
            if(strcmp(i->ptr, st->ptr) != 0)
                puts(i->ptr);
        }
    }
    stack_clear(st);
    return 0;
}
 
//вставка
int stack_push(struct stack** st, const char* ptr){
    struct stack* p = (struct stack*)malloc(sizeof(struct stack));
    if(p != NULL){
        p->ptr  = ptr;
        p->next = *st;
        *st = p;
    }
    return (p != NULL);
}
 
//удаление всех
void stack_clear(struct stack* st){
    struct stack* t;
    while(st != NULL){
        t  = st;
        st = st->next;
        free(t);
    }
}
0
0 / 0 / 0
Регистрация: 15.04.2016
Сообщений: 30
10.05.2016, 16:20  [ТС] 5
Цитата Сообщение от Геомеханик Посмотреть сообщение
#include <stdio.h>
...
}
А этот точно C (СИ)?

 Комментарий модератора 
5.17 Запрещено избыточное цитирование. Цитируйте только необходимые части сообщений, на которые отвечаете.
Правила форума
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
10.05.2016, 16:35 6
Цитата Сообщение от Pandaky Посмотреть сообщение
А этот точно C (СИ)?
А в чем сомнение?
0
0 / 0 / 0
Регистрация: 15.04.2016
Сообщений: 30
10.05.2016, 18:40  [ТС] 7
Цитата Сообщение от HighPredator Посмотреть сообщение
А в чем сомнение?
Просто функцию void не использовали раньше.

Добавлено через 2 минуты
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка 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. ConsoleApplication6 d:\мои документы\documents\visual studio 2015\projects\consoleapplication6\consoleapplication6\consoleapplication6.cpp 27

И почему-то такую вот ошибку выдает. Меняла на strcpy_s, но опять что-то не то. Не могли бы помочь исправить?
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
10.05.2016, 20:00 8
Цитата Сообщение от Pandaky Посмотреть сообщение
Меняла на strcpy_s, но опять что-то не то
Надо же не бездумно менять. Надо, например, открыть гугл, найти эту функцию, почитать описание, добавить нужных аргументов в вызов и получить счастье. А лучше поменять настройки в студии, чтобы то, что является предупреждением не выдавалось за ошибку. Это не для начинающих.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12835 / 7571 / 1765
Регистрация: 25.07.2009
Сообщений: 13,968
10.05.2016, 20:19 9
Геомеханик, при строке
Цитата Сообщение от Геомеханик Посмотреть сообщение
"XXZXX, XXAXX, ABC, XXXX, ABCDEF, MMMM, XXQXX, XXWXX"
XXZXX, XXAXX, XXXX и XXQXX всё-таки отличаются от последнего слова. Но это пол-беды.
Цитата Сообщение от Геомеханик Посмотреть сообщение
strcpy(p + n, p + (n + 1));
If copying takes place between objects that
overlap, the behavior is undefined.
7.24.2.3 The strcpy function, Committee Draft — April 12, 2011

Добавлено через 4 минуты
Цитата Сообщение от Pandaky Посмотреть сообщение
Меняла на strcpy_s, но опять что-то не то.
Цитата Сообщение от Pandaky Посмотреть сообщение
To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
Это было бы правильнее, чем нестандартные поделки от Микрософт пытаться приделать. К тому же это имя будет конфликтовать с появившейся в ANSI C 11 одноимённой функцией (K.3.7.1.3),
0
1684 / 948 / 257
Регистрация: 30.06.2015
Сообщений: 4,938
Записей в блоге: 54
10.05.2016, 20:40 10
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
#include <stdio.h>
#include <string.h>
#define N 256
#define D " \t\n.,;:!?"
    int main(void)
{
    char   s1[N] ="XXZXX, XXWXX, ABC, XXWXX, ABCDEF, MMMM, XXQXX, XXWXX";
    int i=0,j,l;
     char *s2[N];
    char *strp1;
        char*strp2=NULL;
for(strp1=strtok(s1,D);strp1!=NULL;strp1=strtok(NULL,D)){s2[i]=strp1;strp2=strp1;i++;}
for(j=0;j<i-1;j++){
        if(strcmp(strp2,s2[j])!=0)
            {l=strlen(s2[j]);
              if(l/2!=0){
                strp1=s2[j]+(l/2);
                *strp1='\0';
        strncat(s2[j],strp1+1,l/2);
                               }printf("%s\n",s2[j]);
              }
                      }
    return(0);
}
0
0 / 0 / 0
Регистрация: 15.04.2016
Сообщений: 30
10.05.2016, 21:58  [ТС] 11
а можно, чтобы слова рандомно выводились?
0
0 / 0 / 0
Регистрация: 15.04.2016
Сообщений: 30
13.05.2016, 18:27  [ТС] 12
Уже не надо.
Спасибо, за помощь)
0
13.05.2016, 18:27
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.05.2016, 18:27
Помогаю со студенческими работами здесь

Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждый из них по правилу
Дан текст. Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждый...

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

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

Напечатать все слова, отличные от последнего слова
Дан текст. Между соседними словами – не менее одного пробела, за последним словом - точка....


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

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

Новые блоги и статьи
В чем отличие между INNER JOIN и OUTER JOIN
bytestream 22.01.2025
В современных базах данных информация часто распределена между множеством взаимосвязанных таблиц, что делает операции объединения JOIN неотъемлемой частью работы с SQL. Эти операции позволяют. . .
Как сделать первую букву заглавной в JavaScript
bytestream 22.01.2025
JavaScript предоставляет разработчикам множество инструментов для эффективной работы с текстовыми данными. Одной из часто встречающихся задач при обработке строк является преобразование первой буквы. . .
Что такое Big O нотация и алгоритмическая сложность
bytestream 22.01.2025
Введение в алгоритмическую сложность В мире разработки программного обеспечения эффективность алгоритмов играет crucial роль в создании качественных приложений. Алгоритмическая сложность. . .
Как решать конфликты объединения (merge) в Git
bytestream 22.01.2025
Что такое конфликты слияния Конфликты слияния в системе контроля версий Git возникают в ситуациях, когда две или более ветки разработки содержат несовместимые изменения в одних и тех же участках. . .
Как использовать регулярные выражения
bytestream 22.01.2025
Регулярные выражения представляют собой мощный инструмент для работы с текстовыми данными, который позволяет осуществлять поиск, проверку и манипуляцию строками на основе определенных шаблонов. Этот. . .
Как выйти из Vim
bytestream 22.01.2025
Vim (Vi IMproved) представляет собой один из самых влиятельных текстовых редакторов в истории компьютерной индустрии, эволюционировавший из своего предшественника Vi, созданного Биллом Джоем в 1976. . .
NoSQL базы данных: что это такое и какие существуют
bytestream 22.01.2025
В современную эпоху цифровой трансформации объемы данных растут экспоненциально, создавая новые вызовы для традиционных систем управления базами данных. NoSQL (Not Only SQL) представляет собой. . .
Обновление исследования от команды MCM (январь 2025 г.)
Programma_Boinc 22.01.2025
Обновление исследования от команды MCM (январь 2025 г. ) Мы продолжаем изучать молекулярные сигнатуры, связанные с раком легких, с текущим фокусом на GCM1, факторе транскрипции, участвующем в. . .
Как работать с Kafka в Go (Golang)
bytestream 22.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки событий и интеграции микросервисов. Эта система, изначально. . .
Как использовать RabbitMQ в Go (Golang)
bytestream 22.01.2025
RabbitMQ представляет собой надежный и широко используемый брокер сообщений, который играет ключевую роль в построении современных распределенных систем и микросервисной архитектуры. В основе работы. . .
Как преобразовать список списков в простой список в Python
bytestream 22.01.2025
При работе с Python разработчики часто сталкиваются с необходимостью обработки сложных структур данных, среди которых особое место занимают вложенные списки. Эти структуры представляют собой списки,. . .
Что такое GUID / UUID и как их создать
bytestream 22.01.2025
В мире разработки программного обеспечения существует постоянная потребность в уникальной идентификации объектов, записей и ресурсов. Эта задача становится особенно актуальной в распределенных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru