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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Aecttann
6 / 6 / 0
Регистрация: 19.10.2013
Сообщений: 335
#1

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

07.06.2014, 21:38. Просмотров 272. Ответов 9
Метки нет (Все метки)

Программа находит в тексте слово 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2014, 21:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа со строками. Вывод искомого слова (C++):

Работа со строками. Вывод второго слова - C++
Добрый день! Дана задача: ввести произвольный текст. программа выдаёт второе слово(слова разделены пробелами). #include &lt;string&gt; ...

Работа со строками (Не считывает 2 слова через пробел) - C++
Понимаю, что вопрос очень простой, но сам ответа на него найти не могу уже не первый раз. есть код Book mybook; for (int i(0); i...

Работа со строками. Найти длину самого короткого слова. - C++
Даны слова разделенные пробелами. Найти длину самого короткого слова.

Работа со строками: каждую букву введенного слова записать в массив - C++
Задача состоит в том,что мне требуется ввести слово.Затем каждую его букву записать в массив. Подскажите пожалуйста. На форуме нашел те...

Работа со строками: выводит все слова, с четным количеством букв - C++
Требуется помощь в написании следующей программы: С клавиатуры вводится текстовая строка. Составить программу, которая: ...

Работа со строками, поиск нужных элементов и их вывод - C++
Дана строка, состоящая из групп нулей и единиц. Подсчитать количество единиц в группах с нечетным количеством символов. Вот попробовал,...

9
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.06.2014, 22:17 #2
Цитата Сообщение от Aecttann Посмотреть сообщение
Программа находит в тексте слово red.
Цитата Сообщение от Aecttann Посмотреть сообщение
но слово brred не выводится
Почему оно должно выводиться? Потому что в нём есть некая последовательность символов? При чём здесь тогда поиск слова?
1
Aecttann
6 / 6 / 0
Регистрация: 19.10.2013
Сообщений: 335
07.06.2014, 22:19  [ТС] #3
если в слове есть слово "red" - оно выводится
0
Kerry_Jr
Модератор
Эксперт PHP
2201 / 1997 / 700
Регистрация: 14.05.2014
Сообщений: 5,856
Записей в блоге: 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;
}
1
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.06.2014, 00:07 #5
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
Устраняю свои же косячки
То же самое, только с другой стороны? skinredd ?
1
Kerry_Jr
Модератор
Эксперт PHP
2201 / 1997 / 700
Регистрация: 14.05.2014
Сообщений: 5,856
Записей в блоге: 1
Завершенные тесты: 5
08.06.2014, 00:16 #6
что не так?

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

Добавлено через 35 секунд
alsav22,
Цитата Сообщение от alsav22 Посмотреть сообщение
skinredd не выведет.
а как сделать, чтобы выводило?
может, нужен какой-то цикл с проверкой?
0
alsav22
5421 / 4816 / 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
1
Миниатюры
Работа со строками. Вывод искомого слова  
Kerry_Jr
Модератор
Эксперт PHP
2201 / 1997 / 700
Регистрация: 14.05.2014
Сообщений: 5,856
Записей в блоге: 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;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2014, 01:49
Привет! Вот еще темы с ответами:

Работа из строками. Удалить все слова, которые начинаются с согласных букв - C++
Здравствуйте! Помогите решить задачу: пользователь вводит строку. Нужно ее записать в обратном порядке, посчитать количество чисел в...

Работа со строками. Необходимо подсчитать слова содержащие русские и англ буквы - C++
Среда Visual C++2010 По логике должно работать, но почему то кириллица игнорируется, пытался исправить подключением библиотеки locale не...

Работа со строками. Нахождение повторяющихся символов и вывод на экран - C++
Всем ещё раз доброго времени суток. На форуме уже находил статьи с аналогом моей программы, но нигде не встретил нужного решения. ...

Задача со строками(найти в тексте определенные слова) - C++
Ребят, помогите с задачкой: В имеющемся словаре найти группы слов, записанных одними и теми же буквами и отличающиеся только их порядком,...


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

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
08.06.2014, 01:49
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru