Вывод Слов На Ту Же Букву, Что И Имя Пользователя

  • Автор темы XIII
  • Дата начала
X

XIII

#1
Доброго времени суток!
Нужна помощь..
Написал программу (C++)(а если быть точнее, собрал по кусочкам отовсюду), которая пока что:

1. Приветствует и просит ввести имя.
2. Открывает файл data.txt и выводит оттуда самое длинное слово.

Нужно доделать, но я не знаю как:

3. Чтобы программа выводила еще и все слова начинающиеся на ту же букву, что и самое длинное слово.
4. Чтобы программа выводила все слова начинающиеся на первую букву имени, которое ввел пользователь вначале.

C++:
#include "StdAfx.h" // Ускорение компиляции проекта.
#include <stdio.h> // Используется для поддержки функции printf.
#include <time.h> // Иклюд для работы со временем.
#include <conio.h> // Создание интерфейса MS-DOS. Консольный вывод и ввод.
#include <iostream> // Заголовочный файл с классами, функциями и переменными для организации ввода-вывода в языке программирования C++.
#include <clocale> // Отображение русских символов в программе.
#include <string> // Класс string предназначен, естественно, для работы со строками.
#include <windows.h> // Библиотека для работы с цветным текстом и фоном. Включает в себя Хэндл Консоли и такую функцию, как SetConsoleTextAttribute.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std; // Использование объявления string

int main()
{ 
setlocale(LC_CTYPE, "Rus"); // Отображение кириллицы и русских символов
char name[32];
printf("Введите ваше имя:\n");
scanf("%c",&name);
printf("Здравствуйте, %c. Добро пожаловать в программу вывода слов.\n",name);
long sLen;
long mLen;
char maxWord[32];
char * word;
char * text;
char delim[] = ",.?!-;: \n";
FILE * file = fopen("data.txt","rb");
if(!file)
printf("\nНевозможно открыть файл data.txt\n");
else
{
fseek(file,0,SEEK_END);
sLen = ftell(file);
fseek(file,0,SEEK_SET);
if(!(text = (char *)malloc((1 + sLen)*sizeof(char))))
printf("\nОшибка распределения памяти.\n");
else
if(!fread(text,1,sLen,file))
printf("\nОшибка чтение файла data.txt\n");
else
text[sLen] = '\0';
fclose(file);
if(text)
{
mLen = (sLen = 0);
printf("\nДанные в файле data.txt:\n");
word = strtok(text,delim);
while(word)
{
printf("%s ",word);
sLen = strlen(word);
if(mLen < sLen)
{
strcpy(maxWord,word);
mLen = sLen;
}
word = strtok(NULL,delim);
}
printf("\nСамое длинное слово: %s\n",maxWord);
}
}
getch();
return 0;
}
 
R

rrrFer

#2
Код:
#include <fstream>
#include <string>
#include <vector>
#include <iostream>
int main() {
std::ifstream ifst ("input.txt");
std::vector<std::string> words;
std::string longestWord, word, name;

std::cout << "hi. name: ";
std::cin >> name;

if (nullptr == ifst) return -1;

while (0 == ifst.eof()) {
ifst >> word;
words.push_back(word);
}
ifst.close();

longestWord = "";
for (auto t : words)
if (t.length() > longestWord.length())
longestWord = t;
std::cout << longestWord << std::endl;

auto lmb = [](std::vector<std::string> a, std::string b) {
for (auto t : a)
if (t[0] == b[0])
std::cout << t << " ";
std::cout << std::endl;
};

lmb(words, longestWord);
lmb(words, name);

words.clear();
return 0;
}