Форум программистов, компьютерный форум CyberForum.ru

Работа со строками. Вывод искомого слова - C++

Восстановить пароль Регистрация
 
Aecttann
 Аватар для Aecttann
5 / 5 / 0
Регистрация: 19.10.2013
Сообщений: 261
07.06.2014, 21:38     Работа со строками. Вывод искомого слова #1
Программа находит в тексте слово red.
вот текст файла:
red
bred
brred
bread
skinred
redqwerty

но слово brred не выводится, как это исправить?

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <fstream>
 
using namespace std;
 
int strlength(const char* str)
{
    int count = 0;
    for (int i = 0; str[i] != '\0'; i++, count++);
    return count;
}
 
bool substr(const char* str1, const char* str2)
{
    int j = 0;
    for (int i = 0; i < strlength(str1); i++)
    {
        if (str2[j] == str1[i] && j < strlength(str2))
            j++;
        else if (j == strlength(str2))
            break;
        else
            j = 0;
    }
    return j == strlength(str2) ? true : false;
}
 
int main()
{
    setlocale(LC_ALL, "");
 
    char red[64];
    char b[] = "red";
 
    ifstream input("red.txt");
    ofstream output("out.txt");
 
    while (!input.eof())
    {
        input >> red;
        if(substr(red, b))
        {
            output << red << " ";
            cout << red << endl;
        }
    }
    input.close();
    output.close();
 
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.06.2014, 22:17     Работа со строками. Вывод искомого слова #2
Цитата Сообщение от Aecttann Посмотреть сообщение
Программа находит в тексте слово red.
Цитата Сообщение от Aecttann Посмотреть сообщение
но слово brred не выводится
Почему оно должно выводиться? Потому что в нём есть некая последовательность символов? При чём здесь тогда поиск слова?
Aecttann
 Аватар для Aecttann
5 / 5 / 0
Регистрация: 19.10.2013
Сообщений: 261
07.06.2014, 22:19  [ТС]     Работа со строками. Вывод искомого слова #3
если в слове есть слово "red" - оно выводится
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1863 / 1659 / 578
Регистрация: 14.05.2014
Сообщений: 4,762
Записей в блоге: 1
Завершенные тесты: 5
07.06.2014, 23:58     Работа со строками. Вывод искомого слова #4
Устраняю свои же косячки
C++
1
2
3
4
5
6
7
8
9
10
11
12
bool substr(const char* str1, const char* str2)
{
    int j = strlength(str2) - 1;
    if (j <= 0) return false;
    for (int i = strlength(str1)-1; i >= 0; i--)
    {
        if (str2[j] == str1[i]) j--;
        else if (j == -1) break;
        else j = strlength(str2) - 1;
    }
    return j == -1 ? true : false;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.06.2014, 00:07     Работа со строками. Вывод искомого слова #5
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
Устраняю свои же косячки
То же самое, только с другой стороны? skinredd ?
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1863 / 1659 / 578
Регистрация: 14.05.2014
Сообщений: 4,762
Записей в блоге: 1
Завершенные тесты: 5
08.06.2014, 00:16     Работа со строками. Вывод искомого слова #6
что не так?

Добавлено через 7 минут
Как ни странно, но с конца почему-то заработало.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.06.2014, 00:25     Работа со строками. Вывод искомого слова #7
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
Как ни странно, но с конца почему-то заработало.
skinredd не выведет.
Aecttann
 Аватар для Aecttann
5 / 5 / 0
Регистрация: 19.10.2013
Сообщений: 261
08.06.2014, 00:55  [ТС]     Работа со строками. Вывод искомого слова #8
Kerry_Jr, спасибо)

Добавлено через 35 секунд
alsav22,
Цитата Сообщение от alsav22 Посмотреть сообщение
skinredd не выведет.
а как сделать, чтобы выводило?
может, нужен какой-то цикл с проверкой?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.06.2014, 01:38     Работа со строками. Вывод искомого слова #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вот вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
bool substr(const char* str1, const char* str2)
{
    int sz1 = strlength(str1);
    int sz2 = strlength(str2);
    if (sz1 < sz2 || sz2 == 0)
        return false;
    
    int i = 0;
    for (int j = 0; j < sz1; ++j)
    {
        if (str2[i] == str1[j])
        {
            int m = j;
            for ( ; i < sz2 && m < sz1 && str2[i] == str1[m]; ++i, ++m);
            if (i == sz2)
                break;
            i = 0;
        }
    }
    return i == sz2 ? true : false;
}
В файле:
re
de
red
brrred
brreddd
bread
skinredd
reddqwerty
Миниатюры
Работа со строками. Вывод искомого слова  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2014, 01:49     Работа со строками. Вывод искомого слова
Еще ссылки по теме:

Работа со строками. Необходимо подсчитать слова содержащие русские и англ буквы C++
C++ Работа со строками. Нахождение повторяющихся символов и вывод на экран
C++ Работа со строками. Вывод второго слова

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1863 / 1659 / 578
Регистрация: 14.05.2014
Сообщений: 4,762
Записей в блоге: 1
Завершенные тесты: 5
08.06.2014, 01:49     Работа со строками. Вывод искомого слова #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool substr(const char* str1, const char* str2)
{
    int j  = 0;
    int s1len = strlength(str1);
    int s2len = strlength(str2);
    if ((s1len == 0)|| (s2len == 0)) return false;
    for (int i = 0; i <= s1len-s2len; i++)
    {
        if (str2[j] == str1[i])
        {
            while(j < s2len)
                {
                    if (str2[j] == str1[i+j])j++;
                    else {j = 0; break;}
                }
        }
        else if (j == s2len) break;
    }
    return j == s2len ? true : false;
}
Yandex
Объявления
08.06.2014, 01:49     Работа со строками. Вывод искомого слова
Ответ Создать тему
Опции темы

Текущее время: 09:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru