Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2009, 17:18   #1
grave123
Пользователь
 
Регистрация: 06.12.2009
Сообщений: 15
Восклицание Строки, задача.

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

Пример входных, выходных данных:
входные: rand,loud,then,wood,zet.
результат: then,wood

Некорректно выводится результирующая строка. Что я неверно реализовал в решении задачи?
Помогите найти ошибку.

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
#define MAX_STRINGS 30
#define MAX_LENGTH 10
 
int main()
{
        char s[MAX_STRINGS][MAX_LENGTH], res[MAX_STRINGS][MAX_LENGTH];
        int i, j = 0, kol = 0, k, error, n = -1, m;
 
        printf ("\nInput strings -> ");
 
        for (i = 0; i < MAX_STRINGS && s[i-1][j-1] != '.'; i++)
        {
                for (j = 0; j < MAX_LENGTH - 1 && s[i][j-1]!=',' && s[i][j-1]!='.'; j++)
                        scanf ("%c",&s[i][j]);
 
                s[i][j] = '\0';
                kol++;
        }
 
        for (i = 0, m = 0; i < kol - 1; i++, m++)
        {
                if (i != n)
                {
                        for (k = i + 1, error = 1; k < kol && error == 1; k++)
                        {
                                if (strcmp(s[i],s[k]) >= 0)
                                {
                                        error = 0;
                                        n = k;
                                }
                        }
                        strcpy(res[m],s[i]);
                }
        }
 
        for (i = 1; i < kol && res[i-1][j-1] != '.'; i++)
        {
                for (j = 0; j < strlen(res[i]); j++)
                        printf ("%c",res[i][j]);
        }
 
        _getch();
        return 0;
}

Последний раз редактировалось grave123; 13.12.2009 в 17:30.
grave123 вне форума Ответить с цитированием
Старый 14.12.2009, 14:59   #2
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 218
По умолчанию

а обязательно в двумерный массив? Если нет, то можно введеную строку прочитать с помощью функции
Код:
gets();
и чтобы знать где слова, пользоваться функцией
Код:
strtok();
Olejik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на строки Sweety Помощь студентам 1 23.05.2009 01:44
Задача на строки semennn Помощь студентам 5 25.04.2009 07:58
Задача на строки sergfanat Паскаль, Turbo Pascal, PascalABC.NET 11 19.12.2007 15:34