Помогите исправить прогу на поиск слова, по заданному символу

Помогите исправить программу. Задание: найти первое слово, начинающееся с заданного символа. Требования к программе: динамическая память; ввод/вывод из файла; использовать библиотеку string.h и обращаться к элементам строки так: str[i].

#include <fstream>
#include <iostream>
#include <cstring>
#include <clocale>

using namespace std;

char* ReadStr(ifstream*, int*, int*);
char* ReNew(char*, int);
char* ProcessingStr(char*, int);

void main()
{
    setlocale(LC_CTYPE, "rus");
    ifstream in;
    ofstream out;
    in.open("in.txt", ios::in);
    out.open("out.txt", ios::out);
    in.unsetf(ios::skipws);
    while (!in.eof())
    {
        char* str = NULL;
        int words_in_str = 0;
        char sym;
        str = ReadStr(&in, &words_in_str);
        if ((words_in_str == 0))
            out << "Произошла ошибка! Строка пустая.\n\n\n";
        else if (!(words_in_str == 0))
        {
            out << "Контрольный вывод:\n" << str << endl;
            out << "Введите символ: " << sym << endl;
            sym = getchar();
            str = ProcessingStr(str, sym);
            out << "Результат:\n" << str << endl << endl << endl;
        }
        delete[]str;
    }
    in.close();
    out.close();
    system("pause");
    return;
}
char* ReadStr(ifstream* in, int* wis, int* wn)
{
    char* str = new char[1];
    int i = 0;
    for (char c = ' '; c != '\n' && !(*in).eof(); i++)
    {
        (*in) >> c;
        str = ReNew(str, (i + 1));
        if (c == '\n' || (*in).eof())
        {
            if (str[i - 1] != ' ' && i != 0)
                (*wis)++;
            str[i] = '\0';
        }
        else
        {
            if (c == ' ' && str[i - 1] != ' ')
                (*wis)++;
            str[i] = c;
        }
    }

    if (str[0] != '\0')
    {
        (*in).setf(ios::skipws);
        (*in) >> (*wn);
        (*in).unsetf(ios::skipws);
    }
    return str;
}

char* ReNew(char* str, int size)
{
    char* tmp = new char[size - 1];
    strncpy(tmp, str, size - 1);
    str = new char[size];
    strncpy(str, tmp, size - 1);
    return str;
}
char* ProcessingStr(char* str, int wn)
{
    int i, k;
    for (i = 0, k = 0; k < wn; i++)
    {
        if (i == 0 && str[i] != ' ')
            k = 1;
        else if (str[i - 1] == ' ' && str[i] != ' ')
            k++;
    }
    char* word = &str[i - 1];
    int pos1, pos2 = 1;
    while (pos2 != 0)
    {
        pos1 = strcspn(word, "0");
        pos2 = strcspn(word, " ");
        if (pos1 < pos2)
        {
            word += pos1 - 1;
            if (*word != '.' && (*word < '0' || *word > '9'))
            {
                word += 1;
                pos1 = strspn(word, "0");
                if (*(word + pos1) != '.')
                    strcpy(word, (word + pos1));
                else
                {
                    strcpy(word, (word + pos1 - 1));
                    word += pos1;
                }
            }
            else
            {
                word += 1;
                word += strspn(word, "0");
            }
        }
        else
            return str;
    }
    return str;
}

А что в задании понимается под «слово»?
И что значит «найти»? Что должно быть в результате этого «найти»?

Фома, задание: найти первое слово, начинающееся с заданного символа. Поиск слова выполняется в тексте, который считывается из файла, символ вводится в консоли.

NAchProg, если много раз сказать «халва», слаще не станет. Ты не ответил на вопросы. Попробуй все-таки напрячься, понять вопросы и ответить на них.

Croessmah, можно обойтись и без strtok. Просто читать поток из файла посимвольно и анализировать. Можно читать поток по лексемам по пробельным разделителям, как >> по умолчанию для строки. Что будет правильно — хз, добиться от тс корректной постановки задачи не получается, как видишь.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

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

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.