Символьные строки. Си.

Рейтинг: 0Ответов: 2Опубликовано: 11.05.2011

Здравствуйте! Помогите, пожалуйста, с одним заданием по Си. Я ввожу предложение с клавиатуры. Надо вывести каждое слово отдельно, но начиная с конца предложения. то есть, сзади наперед. Как это реализовать?

Ответы

▲ 3

мой код чуть-чуть больше, зато проверенный и с комментариями :Ъ

#include <stdio.h>
#include <string.h>

using namespace std;

int Count = 0; //количество слов
int Begin[1111]; //wordsBegin[i] - индекс начала слова i в s
int End[1111]; //wordsEnd[i] - индекс конца слова i в s

char s[11111]; //предложение
int sc = 0; //количество символов

bool isSeparator(char c)//проверяет: служет ли символ разделителем слов.
{
    if (c == ' ' || c == ',' || c == '.') return true;
    return false;
}
void addWord(int &last, int cur) //добавляет слово с номерами символов от last до cur
{
    Begin[Count] = last;
    End[Count] = cur;
    last = cur + 2;
    Count++;
}
int main()
{
    char c = getchar();
    while (c != 10) {
        s[sc++] = c;
        c = getchar();
    }

    int last = 0; //начало первого слова
    for (int i = 0; i < sc; i++)//разбираем наше предложение по словам
    {
        if (isSeparator(s[last])) last = i; //пропускаем разделители
        if (i > 0 && isSeparator(s[i]) && !isSeparator(s[i-1]))
            addWord(last, i-1);
    }

    addWord(last, sc-1); // возможно у нас осталось ещё слово, стоящее в конце предложения
    for (int i = Count-1; i >= 0; i--) //вывод слов в обратном порядке
    {
        for (int j = Begin[i]; j <= End[i]; j++)
            printf("%c", s[j]);
        printf(" "); //разделяем слова пробелом
    }

    return 0;
}
▲ 2
char * s; // введенное предложение
int length = getlen(s);

for (int i = length - 1; i >= 0; i--)
{
    if (s[i] == ' ' || i == 0)
    {
        printf(s + i + 1);
        s[i] = '\0';
    }
}

Я не прогонял на отсутствие опечаток, так что можно считать это псевдокодом. И все-таки хотелось бы поинтересоваться, пробовал ли автор сам решить данную задачу или сразу написал на портал, если пробовал - то в чем собственно сложность была. Вопрос носит профессиональный (преподавательский) характер :)