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

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

Восстановить пароль Регистрация
 
invok
2 / 2 / 0
Регистрация: 18.11.2014
Сообщений: 17
15.11.2015, 11:53     Поиск подстроки в строке #1
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
52
53
54
55
56
57
58
59
#include "stdafx.h" 
#include <stdio.h> 
#include <iostream>
using namespace std;
int GetLength(char* string)
{
    int i;
    int length = 1;
    for (i = 1; string[i]; i++)
    {
        length++;
    }
    return length;
 
}
int FindSubstring(char* string, char* substring)
{
 
    int i, j, a;
    bool presenceSub = false;
    for (i = 0; string[i]; i++)
    {
        if (presenceSub=true)
        {
            return i;
            break;
        }
        j = 0;
        a = i;
        while (string[a] = substring[j])
        {
            a++;
            j++;
            if (j = GetLength(substring))
            {
                presenceSub = true;
                
 
            }
        }
 
    }
    if (presenceSub = false)
    {
        return -1;
    }
}
int main()
{
    char str[] = "Lorem ipsum aset amet";
    char substr[] = "ipsum a";
    cout << FindSubstring(str,substr) << "-is start index " << endl;
    char substr1[] = "Arom";
    cout << FindSubstring(str, substr1) << "-is start index " << endl;
    char str1[] = "Lorem ipsum aset ametsum";
    char substr2[] = "sum";
    cout << FindSubstring(str1, substr2) << "-is start index " << endl;
    return 0;
}
Функция возвращает индекс начала подстроки в строке. В случае отсутствия подстроки в исходной, функция возвращает -1. В случае нахождения более одного вхож-дения подстроки в исходную строку, вернуть индекс начала первого вхождения.
Не могу разобраться во всех трех тестовых случаях возвращается 0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2015, 11:53     Поиск подстроки в строке
Посмотрите здесь:

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5946 / 5551 / 1784
Регистрация: 18.12.2011
Сообщений: 14,180
Завершенные тесты: 1
15.11.2015, 12:00     Поиск подстроки в строке #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от invok Посмотреть сообщение
if (presenceSub=true)
C++
1
if (presenceSub==true)
А правильнее
C++
1
if (presenceSub)
Цитата Сообщение от invok Посмотреть сообщение
while (string[a] = substring[j])
C++
1
while (string[a] == substring[j])

Цитата Сообщение от invok Посмотреть сообщение
if (presenceSub = false)
Пишется
C++
1
if (!presenceSub)
Но это условие здесь лишнее, т.к. сюда управление попадет только, если подстрока не найдена.
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
15.11.2015, 12:12     Поиск подстроки в строке #3
invok, попробуй после строки 36 поставить break;

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
int GetLength(char* string)
{
    int i;
    for (i = 0; string[i]; i++)
    ;
    return i;
}
Добавлено через 7 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
int FindSubstring(char* string, char* substring)
{
  int Ls = GetLegth(string);
  int Lsub = GetLegth(substring);
 
  for(int i=0; i<Ls - Lsub; i++) {
     for(j=0; j<Lsub; j++)
        if (string[i+j] != substring[j]) bfeak;
     if (j==Lsub) return i;
  }
  return -1;
}
Yandex
Объявления
15.11.2015, 12:12     Поиск подстроки в строке
Ответ Создать тему
Опции темы

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