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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Alias332
0 / 0 / 0
Регистрация: 16.10.2011
Сообщений: 22
#1

Напечатать только те слова, перед которыми в строке находятся только меньшие слова, а за ними – только большие - C++

27.11.2011, 18:34. Просмотров 699. Ответов 6
Метки нет (Все метки)

Помогите написать программу на языке ANSI C или C++

Дана строка s, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5
строчных латинских букв. Между соседними словами стоит запятая, за
последним словом - точка. Напечатать только те слова, перед которыми в
строке находятся только меньшие (по алфавиту) слова, а за ними - только
большие.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2011, 18:34     Напечатать только те слова, перед которыми в строке находятся только меньшие слова, а за ними – только большие
Посмотрите здесь:

C++ Сформировать две строки - первая содержит только числа из исходной строки, а вторая – только слова
C++ Напечатать только те слова, перед которыми в строке находятся только меньшие (по алфавиту) слова
Напечатать слова из строки, имеющие четный номер и состоящие только из повторяющихся букв C++
Даны два слова, напечатать только те символы, которые встречаются только в одном из слов C++
Строка: Напечатать те слова, которые отличаются только порядком следования букв. C++
C++ Удалить из строки только те слова, которые состоят только из латинских букв
C++ Напечатать слова, которые встречаются в двух предложениях только один раз (Pascal -> C++)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
27.11.2011, 18:59     Напечатать только те слова, перед которыми в строке находятся только меньшие слова, а за ними – только большие #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
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
 
int main( )
{
    std::vector< std::string > words;
 
    std::istream_iterator< std::string > it ( std::cin );
 
    for( ; it != std::istream_iterator< std::string >( ) &&
         (*it)[ it->length() - 1 ] != '.';
         it++ )
         {
             words.push_back( *it );
 
             size_t comma_pos = words[ words.size() - 1].find_last_not_of( ',' ) + 1;
             words[ words.size() - 1 ].erase( comma_pos, words[ words.size() - 1 ].length() - comma_pos );
         }
 
    words.push_back( *it );
    size_t comma_pos = words[ words.size() - 1].find_last_not_of( '.' ) + 1;
    words[ words.size() - 1 ].erase( comma_pos, words[ words.size() - 1 ].length() - comma_pos );
 
    if( words.size() < 1 )
        return 0;
 
    for( size_t i = 0; i < words.size(); i++ )
    {
        if( ( i == 0 || words[i] > words[i - 1] ) &&
            ( i == words.size() - 1 || words[i] < words[i + 1] ) )
            std::cout << words[i] << "; ";
    }
 
    return 0;
}
lemegeton
2915 / 1344 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
04.12.2011, 22:40     Напечатать только те слова, перед которыми в строке находятся только меньшие слова, а за ними – только большие #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
#include <stdio.h>
 
char *nextWord(char *start) {
  for (; *start != ',' && *start != '.'; ++start);
  return ++start;
}
 
void printWord(char *word) {
  while (*word != ',' && *word != '.')
    printf("%c", *word++);
  printf("\n");
}
 
int compareWords(char *a, char *b) {
  while (*a != ',' && *a != '.' && *b != ',' && *b != '.') {
    if (*a != *b)
      return *a - *b;
    ++a; ++b;
  }
  return 0;
}
 
void printOrdered(char *source) {
  char *prev = source;
  char *curr = nextWord(prev);
  char *next = nextWord(curr);
  while (*next != '\0') {
    if (compareWords(prev, curr) < 0 && compareWords(curr, next))
      printWord(next);
    prev = curr;
    curr = next;
    next = nextWord(next);
  }
}
 
int main(int argc, char *argv[]) {
  printOrdered("boat,child,cort,yacht,store,bold,star,zero.");
  return 0;
}
Alias332
0 / 0 / 0
Регистрация: 16.10.2011
Сообщений: 22
04.12.2011, 23:04  [ТС]     Напечатать только те слова, перед которыми в строке находятся только меньшие слова, а за ними – только большие #4
А можно эту же программу, но только с библиотекой String.h??))
lemegeton
2915 / 1344 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
06.12.2011, 21:59     Напечатать только те слова, перед которыми в строке находятся только меньшие слова, а за ними – только большие #5
Не имеет смысла. Не вижу, чем оттуда можно воспользоваться в решении данной задачи. Если есть предложения, то могу попробовать.
Alias332
0 / 0 / 0
Регистрация: 16.10.2011
Сообщений: 22
14.12.2011, 00:03  [ТС]     Напечатать только те слова, перед которыми в строке находятся только меньшие слова, а за ними – только большие #6
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;
}
КонецСвета
13.01.2013, 21:55     Напечатать только те слова, перед которыми в строке находятся только меньшие слова, а за ними – только большие
  #7
 Комментарий модератора 
кросспост Напечатать только те слова, перед которыми в строке находятся только меньшие (по алфавиту) слова
тема закрыта
Yandex
Объявления
13.01.2013, 21:55     Напечатать только те слова, перед которыми в строке находятся только меньшие слова, а за ними – только большие
Закрытая тема Создать тему
Опции темы

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