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

Тема в разделе "C/C++/C#", создана пользователем XIII, 18 ноя 2012.

  1. XIII

    XIII Гость

    Доброго времени суток!
    Нужна помощь..
    Написал программу (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;
    }
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Код (Text):
    #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;
    }
     
Загрузка...

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