1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

Си количество слов в символьной строке

Тема в разделе "Вопросы новичков и не только", создана пользователем SevereK, 4 май 2011.

  1. SevereK

    SevereK Гость

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

    Ввести символьную строку. Посчитать количество слов в предложении. Если предложение состоит не из одного слова, то переписать второе слово в предложении справа налево. Вывести преобразованную строку. (При выводе строк использовать функцию puts и дополнительных строк не использовать).

    заранее огромная благодарность
     
  2. 1ive

    1ive Well-Known Member

    Репутация:
    0
    Регистрация:
    12 сен 2010
    Сообщения:
    621
    Симпатии:
    0
    Не могу сказать что знаю C, но как-то так...

    По просьбам слушателей - добавил комментарии к коду (ХЗ насколько это понятно, но думаю упростит понимание)
    Код:
    #include <stdio.h>
    #include <string.h>
    
    void InputString(char *str);
    void FormatString(char *str);
    void main()
    {
    const int size = 255; 
    char str[size]; 	
    InputString(str);
    FormatString(str);
    }
    void InputString(char *str)
    {
    printf("Vvod stroki: ");
    gets(str);
    }
    void FormatString(char *str)
    {
    int numWords = 0;
    int startWord = 0;
    int endWord = 0;
    int i;
    for (i = 0; i < strlen(str) - 1; i++)	// по всем символам строки от 0 до strlen(str) - 1 (последнего)
    {
    if ((str[i] == ' ') && (str[i+1] != ' ')) // если найден пробел, и следующий за ним символ не является пробелом
    {
    if (numWords == 1) //если количество слов равно 1
    {
    if (str[i] == ' ') // и если найден пробел
    {
    endWord = i-1; // концу слова присваивается значение (номер пробела) - 1
    }
    }
    numWords = numWords + 1; // увеличиваем на 1 количество слов
    }
    
    if (numWords == 1 && startWord == 0)
    {	
    startWord = i+1;
    }
    }
    if (str[0] != ' ') // если строка начинается с пробела (первый символ - пробел)
    {
    numWords = numWords + 1; // увеличиваем на 1 количество слов
    if (numWords == 2) //если слов 2
    {
    endWord = strlen(str) - 1; // конец последнего слова = длина строки -1
    }
    }
    
    int halfWordLen = startWord + (int)((endWord-startWord)/2); // вводим и вычисляем переменную = середине второго слова (того, которое будем переворачивать)
    int k, j;
    for (j = startWord, k = 0; j <= halfWordLen; j++, k++) //выполняем цикл смены мест букв относилельно оси (середины второго слова)
    {
    char buf;
    buf = str[j];
    str[j] = str[endWord-k];
    str[endWord-k] = buf;
    }
    printf("Vsego %d slov v stroke\n" , numWords ); // выводим результаты
    puts(str);
    }
     
  3. SevereK

    SevereK Гость

    Репутация:
    0
    Warning 1 warning C4627: '#include <string.h>': skipped when looking for precompiled header use c:\study\oop\lab4\zadforum\zadforum\za.cpp 2 1 zadforum

    ошибку пишет...
     
  4. SevereK

    SevereK Гость

    Репутация:
    0
    1ive, сам ступил...всё работает должным образом. Огроменное Вам спасибо!
     
  5. 1ive

    1ive Well-Known Member

    Репутация:
    0
    Регистрация:
    12 сен 2010
    Сообщения:
    621
    Симпатии:
    0
    Не за что) Новичкам запрещено плюсовать?.. Печаль..
     
  6. SevereK

    SevereK Гость

    Репутация:
    0
    Поставьте, пожалуйста, доброму человеку плюсик за меня... ооооооочень-ооооочень сильно выручил и всячески помог в аське с пониманием кода.. огромнейшее спасибо ещё раз;)
     
Загрузка...

Поделиться этой страницей