Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
1

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

07.06.2014, 21:38. Показов 980. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.06.2014, 21:38
Ответы с готовыми решениями:

Работа со строками. Вывод второго слова
Добрый день! Дана задача: ввести произвольный текст. программа выдаёт второе слово(слова разделены...

Работа со строками (Не считывает 2 слова через пробел)
Понимаю, что вопрос очень простой, но сам ответа на него найти не могу уже не первый раз. есть...

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

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

9
5480 / 4875 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
07.06.2014, 22:17 2
Цитата Сообщение от Aecttann Посмотреть сообщение
Программа находит в тексте слово red.
Цитата Сообщение от Aecttann Посмотреть сообщение
но слово brred не выводится
Почему оно должно выводиться? Потому что в нём есть некая последовательность символов? При чём здесь тогда поиск слова?
1
6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
07.06.2014, 22:19  [ТС] 3
если в слове есть слово "red" - оно выводится
0
Эксперт PHP
3026 / 2537 / 1192
Регистрация: 14.05.2014
Сообщений: 7,109
Записей в блоге: 1
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
5480 / 4875 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.06.2014, 00:07 5
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
Устраняю свои же косячки
То же самое, только с другой стороны? skinredd ?
1
Эксперт PHP
3026 / 2537 / 1192
Регистрация: 14.05.2014
Сообщений: 7,109
Записей в блоге: 1
08.06.2014, 00:16 6
что не так?

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

Добавлено через 35 секунд
alsav22,
Цитата Сообщение от alsav22 Посмотреть сообщение
skinredd не выведет.
а как сделать, чтобы выводило?
может, нужен какой-то цикл с проверкой?
0
5480 / 4875 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.06.2014, 01:38 9
Лучший ответ Сообщение было отмечено Aecttann как решение

Решение

Вот вариант:
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
Эксперт PHP
3026 / 2537 / 1192
Регистрация: 14.05.2014
Сообщений: 7,109
Записей в блоге: 1
08.06.2014, 01:49 10
Лучший ответ Сообщение было отмечено Aecttann как решение

Решение

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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2014, 01:49

Работа со строками: каждую букву введенного слова записать в массив
Задача состоит в том,что мне требуется ввести слово.Затем каждую его букву записать в массив....

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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