PDA

View Full Version : مبتدی: مشکل در اجرای برنامه



mohsen111
سه شنبه 01 اردیبهشت 1394, 14:38 عصر
با سلام. برنامه قراره یک الگو را در نوشته جستجو کنه. نمی دونم چرا دستور printf کار نمی کنه.



#include <stdio.h>
#include <string.h>
#include <iostream>

void search(char *pat, char *txt)
{
int M = strlen(pat);
int N = strlen(txt);
int i=0;

/* A loop to slide pat[] one by one */
for (int i = 0; i < N-M; i++)
{
int j=0;
/* For current index i, check for pattern match */
for (int j = 0; j < M; j++)
{
if(txt[i+j] != pat[j]){

break;
}
}
// if pat[0...M-1] = txt[i, i+1, ...i+M-1]
if (j == M)
{
printf("Pattern found at index %d \n", i);
}
}
}
/* Driver program to test above function */
int main()
{
char *txt = "AABAACAADAABAAABAA";
char *pat = "AABA";
search(pat,txt);
getchar();
return 0;
}

ehsan_faal
سه شنبه 01 اردیبهشت 1394, 15:05 عصر
شما الن به پوینترهاتون مقداری غیر از آدرس رو نسبت دادید،درسته؟

mohsen111
سه شنبه 01 اردیبهشت 1394, 15:45 عصر
شما الن به پوینترهاتون مقداری غیر از آدرس رو نسبت دادید،درسته؟

آره. فکر نکنم مشکلی داشته باشه

amirtork
سه شنبه 01 اردیبهشت 1394, 15:48 عصر
سلام
مشکل این هست که شما در حلقه ی for دوباره متغیر ‍‍j رو تعریف کردید، یک بار خارج از حلقه، و یکبار داخل حلقه، همین باعث میشه متغیری که تغییرات روی اون اعمال میشه، متغیری باشه که داخل حلقه تعریف کردید، و بعد از اتمام حلقه از بین میره، بنابراین، کد رو به شکل زیر اصلاح کنید:
#include <stdio.h>
#include <string.h>
#include <iostream>

using namespace std;

void search(char *pat, char *txt)
{
int M = strlen(pat);
int N = strlen(txt);
int i = 0;

/* A loop to slide pat[] one by one */
for (int i = 0; i < N-M; i++)
{
int j=0;
/* For current index i, check for pattern match */
for (; j < M; j++)
if(txt[i+j] != pat[j])
break;
// if pat[0...M-1] = txt[i, i+1, ...i+M-1]
if (j == M)
printf("Pattern found at index %d \n", i);
}
}
/* Driver program to test above function */
int main()
{
char *txt = "AABAACAADAABAAABAA";
char *pat = "AABA";
search(pat,txt);
getchar();
return 0;
}

mohsen111
سه شنبه 01 اردیبهشت 1394, 16:36 عصر
سلام
مشکل این هست که شما در حلقه ی for دوباره متغیر ‍‍j رو تعریف کردید، یک بار خارج از حلقه، و یکبار داخل حلقه، همین باعث میشه متغیری که تغییرات روی اون اعمال میشه، متغیری باشه که داخل حلقه تعریف کردید، و بعد از اتمام حلقه از بین میره، بنابراین، کد رو به شکل زیر اصلاح کنید:
#include <stdio.h>
#include <string.h>
#include <iostream>

using namespace std;

void search(char *pat, char *txt)
{
int M = strlen(pat);
int N = strlen(txt);
int i = 0;

/* A loop to slide pat[] one by one */
for (int i = 0; i < N-M; i++)
{
int j=0;
/* For current index i, check for pattern match */
for (; j < M; j++)
if(txt[i+j] != pat[j])
break;
// if pat[0...M-1] = txt[i, i+1, ...i+M-1]
if (j == M)
printf("Pattern found at index %d \n", i);
}
}
/* Driver program to test above function */
int main()
{
char *txt = "AABAACAADAABAAABAA";
char *pat = "AABA";
search(pat,txt);
getchar();
return 0;
}



بله درست شد. ممنون