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

Как известно, для начинающих программистов строки являются ночным кошмаром, и часто заводят вышеперечисленных в тупик.
Меня эта участь стороной не обошла.

Посетила меня идея написать поиск подстроки в строке. Написал:

#include <iostream>
#include <conio.h>
#include <string.h>
using namespace std;

void nullmasschar( char buff[], int j )
{
    for ( int i = 0; i < j; i++ )
    {
        buff[i] = 0;
    }
}

int main ( int argv, char *argc[] )
{
    setlocale(0,"");
    char buff[100], buff2[100];
    char str[100];
    cout << "Введите строку:" << endl;
    cin.get(str,100);
    cin.ignore();
    cout << "Введите подстроку, которую надо найти:" << endl;
    cin.get(buff,100);
    cin.ignore();
    int temp=0;
    for ( int i = 0; i < strlen(str); i++ )
    {
        temp = 0;
        if ( strlen(buff) + i > strlen(str) ) break;
        for ( int j = i; j < j+strlen(buff); j++ )
        {
            buff2[temp] = str[j];
            temp++;
        }
        if ( strcmp(buff,buff2) == 0 )
            cout << "Свопадение с позиции " << i << " по позицию " << i + strlen(buff) << endl;
        nullmasschar ( buff2, 100 );
    }
    getch();
    return 0;
}

Но программа не работает. В смысле что вообще не работает, запускается, а после ввода строк вырубается с сообщением от виндовс, что программа завершила свою работу. Пожалуйста помогите, а то уже три часа не могу понять, где я накосячил...

porshe, как ты думаешь, в этом цикле условие завершения когда-нибудь выполнится при ненулевой длине строки в buff?

for ( int j = i; j < j+strlen(buff); j++ )
{
    buff2[temp] = str[j];
    temp++;
}

Соответственно Винде не нравится, когда твоя программа начинает лезть в непринадлежащие ей области памяти.

PS. Пожалуйста делай пост программы нормальным форматированием ((

Спасибо, Череп.
З.Ы. не получается у меня сделать нормальное форматирование(((

porshe, поправил твой пост. Исходный код можно отделять 4-мя пробелами. Через редактор, выделяете код и жмете соответствующую кнопку на панели.

Можно принудительно задавать язык для подсветки. Тогда отделение пробелами делать не нужно:

```cpp
#include <iostream>
using namespace std;
int main()
{
    return 0;
}
```

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.