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

Поиск подстроки в строке - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Dream_O
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 35
07.05.2013, 20:23     Поиск подстроки в строке #1
Доброго времени суток! Столкнулся с такой задачей. Вводим 10 слов, далее вводим приставку (начало слова). В итоге программа должна показать слова, которые начинаются с введенной строки. Сделал простые вещи:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main(void)
{
    setlocale(LC_ALL, "Rus");// Для корректного отображения русских символов в консоле
    
    char gwords [10][40], temp[40] ; // определяем необходимые массивы строк
    int cnt;
    
    printf("Введите 10 слов по порядку\n"); 
    for (cnt = 0; cnt < 10; cnt++) gets(gwords[cnt]);  //заполяняем массив словами
    
    printf("Введите приставку: ");  scanf_s("%d",&temp);; // заполняем приставку
//пока всё
    getchar();
    return 0;
}}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2013, 20:23     Поиск подстроки в строке
Посмотрите здесь:

C++ Поиск подстроки в строке
C++ Поиск подстроки в строке
Поиск подстроки в строке C++
C++ Поиск подстроки в строке
C++ поиск подстроки в строке
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
07.05.2013, 20:29     Поиск подстроки в строке #2
вот тут есть код для поиска и замены символов. Вам надо сделать почти то же самое, только не удалять символы, а протий по строке дальше и найти, где заканчивается слово. Если есть вопросы, спрашивайте
Dream_O
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 35
07.05.2013, 21:47  [ТС]     Поиск подстроки в строке #3
Огромное спасибо! Получился код:
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
#include <stdio.h> // Стандартный заголовочный файл ввода/вывода
#include <locale.h> // Используется для задач, связанных с локализацией
#include <string.h> // Используется для задач обработки строк
#include <string>
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus"); // Для корректного отображения русских символов в консоли
 
    char gwords [3][40];
    int cnt,a,sum=0,;
    string mystr,find;
 
    printf("Введите 10 слов по порядку\n"); 
    for (cnt = 0; cnt < 3; cnt++) gets(gwords[cnt]); //заполяняем массив словами
    
    printf("Введите приставку: ");   
    cin>>find; // заполняем приставку
    
    for (int i=0;i<=3;i++)
    {
        mystr = gwords[i];
        a = mystr.find(find,0);
        if (a = 0)
        {
            printf("Найдено слово: %7d\n",mystr);
            sum++;
        }
    
    }
    if (sum>0)
    {printf("Всего найдено слов: %7d\n",sum);}  
    getchar();
    getchar();
    return 0;
}
Но вот if (a = 0) не работает =(
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
07.05.2013, 22:15     Поиск подстроки в строке #4
А почему а должно быть 0? Если такого вхождения нету, то функция возвращает -1,а не 0
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
07.05.2013, 22:19     Поиск подстроки в строке #5
Цитата Сообщение от Dream_O Посмотреть сообщение
C++
1
if (a = 0)
Это присваивание, а не сравнение.
Вот сравнение:
C++
1
if (a == std::string::npos )

Не по теме:

Цитата Сообщение от metaluga145 Посмотреть сообщение
то функция возвращает -1,а не 0
возвращается std::string::npos

metaluga145
07.05.2013, 22:25
  #6

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
возвращается std::string::npos
npos=-1, не так ли?

Croessmah
07.05.2013, 22:35
  #7

Не по теме:

Цитата Сообщение от metaluga145 Посмотреть сообщение
npos=-1, не так ли?
так. Только упираемся в несколько вещей:
size_type
магическое число
ну и конечно же если вдруг npos!=-1 (захотят переделать стандарт, ну или производители компилятора не захотели делать его -1)
То бишь с npos будет работать всегда, вне зависимости от значения, которому оно равно.
Собственно для этого такие константы и придумывают - чтобы в случае их изменения, клиентский код не нуждался в переделке

metaluga145
07.05.2013, 22:38
  #8

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
магическое число
что это значит?

Croessmah
07.05.2013, 22:41
  #9

Не по теме:

Цитата Сообщение от metaluga145 Посмотреть сообщение
что это значит?
Википедия: Магическое число
Магическое число, или сигнатура — целочисленная константа, используемая для однозначной идентификации ресурса или данных.
Такое число само по себе не несёт никакого смысла, и может вызвать недоумение, встретившись в коде программы без соответствующего контекста или комментария, при этом попытка изменить его на другое, даже близкое по значению, может привести к абсолютно непредсказуемым последствиям.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2013, 03:34     Поиск подстроки в строке
Еще ссылки по теме:

C++ Поиск подстроки в строке
C++ Поиск подстроки в строке
Поиск подстроки в строке C++

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

Или воспользуйтесь поиском по форуму:
Dream_O
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 35
08.05.2013, 03:34  [ТС]     Поиск подстроки в строке #10
Сравниваю с 0 т.к. меня устаивают только те случаи, когда вхождение начинается в начале слова. Если его нет или подстрока в середине строки, то ничего не делаем
Yandex
Объявления
08.05.2013, 03:34     Поиск подстроки в строке
Ответ Создать тему
Опции темы

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