#include <stdio.h>

int main()
{
    char word1[1000], word2[1000], str[1000];
    while (scanf("%s%s",word1,word2)!=EOF) {
        int i, j, len1 = 0, len2 = 0, a, b;
        for (j=0; word1[j] != '\0'; j++) {
            len1++;
        }
        for (i=0; word2[i] != '\0'; i++) {
            len2++;
        }

        for (a=0, b=0; ; ) {
            for ( ; ((a<len1) && (b<len2)); ) {
                if(word1[a] == word2[b]) {
                    str[b] = word1[a];
                    if((a==len1-1) && (b==len2-1)) {
                        b++;
                        str[b] = '\0';
                    }
                    a++;
                    b++;
               }
               else 
                   a++;
           }
           break;
       }

       if(strcmp(word2,str) == 0)
           printf("Possible\n");
       else
           printf("Impossible\n");
   }

return 0;
}

প্রব্লেম লিঙ্কঃ http://school.outsbook.com/problems/problemdetails/10025

এই কোডে প্রথমবার ইনপুট নেয়ার সময় str অ্যারের মধ্যে একটা মান রাখতে হয়। পরে ইনপুট নেওয়ার সময় str অ্যারেতে একই মান থাকে আর ইনপুট নিলে এখানে এর মান রাখতে গিয়ে ঝামেলা হয় (যদি আগের ইনপুটে ক্যারেক্টার বেশি থাকে)। এর জন্য str অ্যারে রিসেট করা প্রয়োজন। এটা কীভাবে করবো?

asked 27 Aug, 16:10

pollob1563's gravatar image

pollob1563
1196

edited 27 Aug, 17:12

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
60618

len1 এবং len2 বের করার জন্য দুটি লুপের দরকার নেই। এর জন্য strlen() নামের একটা ফাংশন আছে। strcmp(), strlen() দুটি ফাংশনের জন্যই string.h হেডার ফাইল ইনক্লুড করতে হবে। অ্যারে রিসেট বলতে কী বোঝাচ্ছো? arr[i] ইনডেক্সে আগের যাই থাকুক না কেন, সেখানে নতুন কিছু সরাসরি বসানো যায়। সুতরাং রিসেট(?) বা এ জাতীয় কিছুর কোনো দরকারই নেই (অস্তিত্বও নেই)।

(27 Aug, 17:39) Mosharraf Hosain ♦

এখানে বুঝাতে চাচ্ছি array তে সব ডাটা ডিলিট করা।মানে প্রথম ইনপুট নিলে array পূরন হবে. কিন্ত 2nd time এ array তে ইনপুট নিলে প্রথম ইনপুট এর ডাটা থেকে যাবে। তখম আমার শেষের দিকে array data clear করা প্রয়োজন। তখন এই সমস্যা সমাধান করবো কিভাবে?

(28 Aug, 16:58) pollob1563

অ্যারে কখনো খালি থাকে না। ডিক্লেয়ার করলেই কিছু গারবেজ (আবর্জনা, অর্থহীন মান) মান অ্যারেতে চলে আসে। আমরা যখন অ্যারেতে কোনো মান বসাই তখন গারবেজ মান চলে গিয়ে আমাদের বসানো মান থেকে যায়। আমরা যতবার ইচ্ছা ততবারই মান বসাতে পারি। কোনো প্রকার ক্লিয়ার বা ডিলিট করার দরকার হয় না। উত্তরের কোডটা থেকে আরো ভালো বুঝতে পারবে। সোজা কথায়, অ্যারে কখনো খালি থাকে না, একে খালি করা যায় না।

(29 Aug, 15:15) Mosharraf Hosain ♦

প্রথমে এই প্রোগ্রামটা চালাও

#include <stdio.h>

int main()
{
    int i, arr[10];
    /* for (i=0; i<10; i++) {
        arr[i] = i+1;
    } */
    for (i=0; i<10; i++) {
        printf("%d\n",arr[i]);
    }

    return 0;
}

মানগুলো কোথা থেকে আসলো? কম্পাইলার অ্যারেটা মেমোরির যে স্থানে অ্যালোকেট করেছে সেই জায়গার আগে থেকে থাকা মান এগুলো। এবার কমেন্ট করা অংশটা থেকে কমেন্ট তুলে নিয়ে প্রোগ্রামটা চালাও। আগের মানগুলো মুছে গিয়ে নতুন ১, ২, ৩, ৪, .... বসে গেছে তাই না!

অ্যারে ক্লিয়ার বা অ্যারের মান ডিলিট বলে কিছু নেই। আগের মান যাই থাক, সেখানে নতুন করে ইচ্ছামত মান বসানো যায়। অ্যারেতে দ্বিতীয়বার ইনপুট নিলে প্রথমবারের মানগুলো এমনিতেই মুছে যায়। সেটা ক্লিয়ার বা ডিলিট করার কোনো দরকার নেই।

permanent link

answered 29 Aug, 15:09

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
60618

edited 29 Aug, 15:20

ওকে। বুঝলাম ডিলিট করা যায় না। কিন্তtest case এ প্রথম ইনপুট নিলে আমি কাজ করলাম। আমি একটা c তে স্ট্রিং নিলাম। এখানে সংখ্যা ১০টা element থাকবে।পরের ইনপুটে নিলাম। ওই স্ট্রিং আমার ৫ টা element থাকবে সে সময় আমি কি করব?

(30 Aug, 14:41) pollob1563

কিছুই করতে হবে না। পরেরবার স্বয়ংক্রিয়ভাবেই অ্যারের শুরুর দিক থেকে জায়গা নিয়ে নেবে। তোমার কাজ হচ্ছে ইনডেক্সিং ভ্যারিয়েবল (যে ভ্যারিয়েবল দিয়ে অ্যারে ইনডেক্স করছো, এখানে b)-এর মান লুপের শুরুতে রিসেট করা, যেটা তুমি আগে থেকেই করে রেখেছো। সুতরাং কোনো সমস্যা নেই।

(30 Aug, 16:46) Mosharraf Hosain ♦
Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×395
×56
×55
×1

question asked: 27 Aug, 16:10

question was seen: 143 times

last updated: 30 Aug, 16:46