Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Alias332
0 / 0 / 0
Регистрация: 16.10.2011
Сообщений: 22
1

Напечатать только те слова, перед которыми в строке находятся только меньшие (по алфавиту) слова

18.12.2011, 18:31. Просмотров 862. Ответов 1
Метки нет (Все метки)

Народ, помогите дописать программу, на языке ANSI C.

Задание:
Дана строка s, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5
строчных латинских букв. Между соседними словами стоит запятая, за
последним словом - точка. Напечатать только те слова, перед которыми в
строке находятся только меньшие (по алфавиту) слова, а за ними - только
большие.

Программа:
Код C



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
// 4.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <string.h>
#include <iostream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{setlocale(LC_ALL,"rus");
        
        char a[6], b[180], c[5]=",",*v, *token,*c1=0,*c2=0,*c3=0;
        int i, k,n,z=0,d1, d2;
 
        
 
 
        gets_s(a);
        strcpy_s(b,a);
        for(i=0;i<4 ;i++)//i<4 - это что бы проверка программы была быстрее, не приходилось печатать 30 слов//
        {
                
                strcat(b,c);
                gets_s(a);
                strcat(b,a);
                
                n=strlen(b);
                for(k=0;k<n;k++)
                
                        if (b[k]=='.')
                                 
                                i=4;
                         
        }
 
        
printf("%s\n",b);
 
        
 
        
    token=strtok(b,c);
        while(token!=NULL)//где-то здесь проблемма находится, до этого момента алгоритм работает верно//
        {
                if(z>=3)
                {
                        d1=strcmp(c1,c2);
                        d2=strcmp(c2,c3);
                        if(d1<0&&d2>0)
                        {
                                printf("%s%s",c2,c);
                        }
 
                }
                else
                {
                        strcpy(c3,c2);//Буфер//
                        strcpy(c2,c1);
                        strcpy(c1,token);
                        z++;
                }
                token=strtok(NULL,c);
        }
        return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2011, 18:31
Ответы с готовыми решениями:

Вывести слова, перед которыми в строке находятся только меньшие (по алфавиту) слова, а за ними только большие
Подскажите пожалуйста, если у меня была строка вроде char str, мне нужно...

Найти те слова, перед которыми в последовательности находятся только меньшие по алфавиту слова
Дана не пустая последовательность слов (не более 30), в каждом слове не более 8...

Напечатать только те слова, буквы в которых упорядоченны по алфавиту
Добрый вечер. Сижу и пытаюсь разобраться с заданием. &quot;Дана последовательность,...

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

Найти в строке слова, состоящие только из букв и только из цифр
Помогите новичку, прошу. УСЛОВИЕ: Вводят строку слов. Необходимо найти слова,...

1
Nameless One
Эксперт С++
5788 / 3437 / 352
Регистрация: 08.02.2010
Сообщений: 7,448
18.12.2011, 18:56 2
То что ты написал — это на ANSI C даже и не смахивает.
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define SEP ","
 
int main(int argc, char* argv[])
{
    char *first, *middle, *last;
 
    char *dotptr;
    
    if(argc != 2)
    {
    fprintf(stderr, "Usage: %s SENTENCE\n", *argv);
    exit(1);
    }
 
    if((dotptr = strchr(argv[1], '.')) == NULL)
    {
    fprintf(stderr, "`%s': dot character not found\n", argv[1]);
    exit(1);
    }
 
    *dotptr = '\0';
    
    if((first = strtok(argv[1], SEP)) == NULL || (middle = strtok(NULL, SEP)) == NULL)
    {
    fprintf(stderr, "`%s': bad sentence format\n", argv[1]);
    exit(1);
    }
 
    while((last = strtok(NULL, SEP)) != NULL)
    {
    if(strcmp(first, middle) < 0 && strcmp(middle, last) < 0)
        puts(middle);
 
    first = middle;
    middle = last;
    }
 
    exit(0);
}
Использовать так:
Код
[nameless@desktop c]$ ./sample ba,aa,ab,aa,ab,ac,foo,z.
ab
ac
foo
[nameless@desktop c]$
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2011, 18:56

В символьной строке оставить только те слова, которые состоят только из разных букв
Мне дали такое задание В символьной строке оставить только те слова, которые...

Распечатать только те слова, в которых буквы упорядочены по алфавиту
Добрый день. Помогите, пожалуйста, с заданием. Из введенного пользователем...

Напечатать все слова из текстового файла, состоящие только из латинских букв - C (СИ)
составить программу, выполняющую преобразование над текстовыми файлами согласно...


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

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

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