Другие языки программирования и технологии

Помогите с программой на си! Программа в описании

Помогите с программой на си! в строке слова разделены пробелами найти кол слов, в которых первый и последние символы совпадают
Помогите с покупкой 30 литров 98го
АИ
Александр Игнашков
54 681
Лучший ответ
Gleb Mikhalchenko Я согласен на 10 литров 95 Euro 5
Глупый вопрос, повторённый дважды, умней не становится. У тебя спрашивали: "Где программа? " - а не текст задания.
ОХ
Олег Хмыров
81 920
1) надо сделать массив из слов
2) посчитать кол-во элементов массива, в которых первый и последние символы совпадают
читать из файла можно scanf-ом, шаг 1) c = fscanf(MyFile, "%s", &buffer);
fscanf возвращает количество считанных символов, так что длина "слова" уже известна, теперь сравниваешь 0-й и последнисимвол слова, и если они одинаковые, увеличиваешь счетчик на 1, переходишь к шагу 1. fscanf возвращает EOF, когда достигнут конец потока, так что чтобы не получить бесконечный цикл, проверяй возвращаемое из fscanf ззначение на EOF, программа на 5 строк, бесплатно никто не напишет
_M
__Di Mc [D -Style]__
7 591
#include <stdio.h
#include <conio.h
#include <locale.h

// функция переводит в нижний регистр
char tolow(char ch)
{
for(int i(65); i <= 90; i++)
if(ch == char(i)) return (char) (i+32);
for(int i(-64); i <= -33; i++)
if(ch == char(i)) return (char) (i+32);

return ch;
}

// функция проверяет является ли символ буквой
bool isalp(char ch)
{
for(int i(65); i <= 90; i++)
if(ch == (char)i) return true;
for(int i(97); i <= 122; i++)
if((int)ch == i) return true;
for(int i(-64); i <= -1; i++)
if(ch == (char)i) return true;

return false;
}

// функция проверяет на совпадение первой и последней букв в слове
bool isEqual(char *st, int a)
{
char begin, end;
begin = st[a]; // первый символ слова

// в этом цикле находим конец слова
for(; isalp(st[a]); ++a);
end = st[a-1]; // последний символ слова

//cout << "begin = " << begin << " end = " << end << endl;
printf("begin = %c, end = %c\n", begin, end);

// если символы (без учёта регистра) совподают, то возвращаем true
//if(tolower(begin) == tolower(end)) return true;
if(tolow(begin) == tolow(end)) return true;
// возвращаем false, если не совподают
else return false;
}

int main(){
setlocale(0,"");

char *s = "Привет Пфп Яля аМа мир. Мфм Hello world. Aba zaZ This is me. Ships are here. mom";
int count(0); // счётчик слов
bool inWord = false; // переменная для определения находится ли в слове символ

// выводим строку
//cout << s << endl;
printf("%s\n",s);

for(int i(0); s[i]; i++)
{
//if(i == 0 || s[i] == ' ' && !inWord) // считаем количество слов
if(isalp(s[i]) && !inWord)
{
inWord = true;

// счётчик должен увеличиваться только, если первай и последняя
// буквы совподают, поэтому проверку этого условия делаем в функции
if(isEqual(s,i))
count++;
} else if(s[i] == ' ') inWord = false;
}

// выводим результат
//cout << "Number of words is " << count << endl;
printf("Number of words is %i.\n", count);
//printf("%i",'А');

getch();
return 0;
}