• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

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

  • Автор темы SevereK
  • Дата начала
S

SevereK

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

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

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

1ive

Не могу сказать что знаю C, но как-то так...

По просьбам слушателей - добавил комментарии к коду (ХЗ насколько это понятно, но думаю упростит понимание)
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);
}
 
S

SevereK

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

ошибку пишет...
 
S

SevereK

1ive, сам ступил...всё работает должным образом. Огроменное Вам спасибо!
 
S

SevereK

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!