সি পোগ্রামিং – Strings / স্ট্রিং

স্ট্রিং হচ্ছে কারেকটার সেট। একটা ওয়ার্ড, একটা বাক্য, একটা প্র্যারাগ্রাফ, সব গুলোই স্ট্রিং। যেমন Hello World একটা স্ট্রিং। আবার hello ও একটা স্ট্রিং। world ও একটা স্ট্রিং। যখন শুধু একটা বর্ণ, তখন তা কারেকটার।

আগে বলেছি স্ট্রিং হচ্ছে কারেকটার সেট। হ্যা, একটা one-dimensional কারেকটার অ্যারে হচ্ছে স্ট্রিং। লেখাটি পড়ার আগে অ্যারে/Array সম্পর্কে ধারণা থাকা লাগবে। অ্যারে সম্পর্কে এ লেখা থেকে জানা যাবে। একটা স্ট্রিং নিচের মত করে ডিক্লেয়ার করা হয়ঃ
char string[50] = “This is a static string”;

আর প্রিন্ট করার জন্য লিখতে হয়ঃ
printf(“%sn”, string);

আমরা একটা স্ট্রিং ডিক্লেয়ার এবং তা প্রিন্ট করার জন্য একটা প্রোগ্রাম লিখে ফেলিঃ

#include <stdio.h>
#include <string.h>
int main ()
{
    char string[50] = "Hello";
    printf("%s\n", string);

    return 0;
}

Hello এ স্ট্রিংটা প্রিন্ট করার জন্য আমরা 50 সাইজের একটা কারেকটার অ্যারে ডিক্লেয়ার করেছি, কিন্তু আমাদের বর্ণ মাত্র ৫টা। তাই আমাদের এত বড় অ্যারে ডিক্লেয়ার করার দরকার নেই। তার জন্য আমরা 5 সাইজের একটা অ্যারে ডিক্লেয়ার করলেই হবে। এখানে বলে রাখা ভালো যে, আমরা যখন একটা স্ট্রিং ডিক্লেয়ার করব, তখন সব গুলো বর্ণের শেষে অটোমেটিক্যালি একটা null character ” যুক্ত হবে। নিচের ছবিটা দেখি।

string_representation

Hello স্ট্রিং এর জন্য আমাদের টোটাল তাহলে ৬ সাইজের একটা অ্যারে দরকার। Hello এর পাঁচটা বর্ণ এবং একটা নাল কারেকটার। আবার আমরা জানি অ্যারে এর indexing শুরু হয় ০ থেকে। তাহলে আমাদের Hello স্ট্রিং নিচের মত করেও ডিক্লেয়ার করতে পারিঃ

char string[5] = “Hello”;

আবার আমরা চাইলে কত সাইজের অ্যারে ব্যবহার করব তা রান টাইমের উপর ছেড়ে দিতে পারি। প্রোগ্রাম অটোম্যাটিক্যালি একটা সাইজ এসাইন করে দিবে। তার জন্য লিখবঃ

char string[] = “Hello”;

এবার একটা প্রোগ্রাম লিখি, যেখানে ইউজার থেকে একটা ব্যাক্য ইনপুট নিবে, এবং পরে তা প্রিন্ট করবেঃ

#include <stdio.h>
#include <string.h>
int main ()
{
    char string[100];
    printf("Enter a sentance: ");

    scanf(" %[^\n]s", &string);
    printf("%s\n", string);

    return 0;
}

উপরের প্রোগ্রামে আমরা scanf এর ভেতর লিখছি %[^n]s। scanf দিয়ে স্পেস ইনপুট নেওয়া যায় না। তার জন্য স্পেশাল মডিফায়ার ব্যবহার করতে হয়। সে জন্য এভাবে লেখা। আর scanf ছাড়া আমরা gets দিয়ে স্ট্রিং ইনপুট নিতে পারি। gets দিয়ে উপরের প্রোগ্রাম লিখলে হবেঃ

#include <stdio.h>
#include <string.h>
int main ()
{
    char string[100];
    printf("Enter a sentance: ");

    gets(string);
    printf("%s\n", string);

    return 0;
}

সিম্পল, তাই না?

 

Strings Concatenation

 

Concatenation মানে হচ্ছে জোড়া দেওয়া। দুইটা আলাদা আলাদা স্ট্রিং এক সাথ করার জন্য Strings Concatenation ব্যবহার করা হয়। এর জন্য একটা লাইব্রেরী ফাংশন রয়েছে। strcat(), যা ব্যবহার করে দুইটা স্ট্রিং এক সাথ করা যায়। strcat() ইনপুট হিসেবে দুইটা স্ট্রিং নেয়। এভাবেঃ strcat(string1, string2) এরপর string2 এর ভেতরে থাকা স্ট্রিং string1 এর সাথে যুক্ত করে দেয়, নিচের প্রোগ্রামটি দেখিঃ

#include <stdio.h>
#include <string.h>
int main ()
{
    char string1[] =  "Hello ";
    char string2[] = "World";
    strcat(string1, string2);

    printf("%s\n", string1);

    return 0;
}

 

strcmp()

দুইটা স্ট্রিং কম্পেয়ার করার জন্য ব্যবহার করা হয় strcmp(string1, string2)। দুইটা স্ট্রিং এ ফাংশনে পাস করলে তিনটা মান রিটার্ন করেঃ

  • রিটার্ন ভ্যালু ০ থেকে ছোট হবে যদি string1 থেকে string2 বড় হয়।
  • রিটার্ন ভ্যালু ০ থেকে বড় হবে যদি string1 থেকে string2 ছোট হয়।
  • রিটার্ন ভ্যালু ০ হবে, যদি দুইটা স্ট্রিং একই হয়।
#include <stdio.h>
#include <string.h>
int main(){

    int ret;
    char string1[50], string2[50];
    printf("Enter string 1:");
    gets(string1);

    printf("Enter string 2:");
    gets(string2);

    ret = strcmp(string1, string2);

    if(ret < 0){
          printf("string1 is less than string2");
       }
   else if(ret > 0){
          printf("string2 is less than string1");
       }
   else{
          printf("string1 is equal to string2");
       }



   return 0;
}

strcpy()

 

strcpy() তে দুইটা স্ট্রিং পাস করলে দ্বিতীয় স্ট্রিং এর ভ্যালু প্রথম স্ট্রিং এ কপি করবে। যেমন strcpy(string1, string2) পাস করলে string2 এর ভেতরের স্ট্রিংটা string1 এ এসাইন হয়ে যাবে। নিচের প্রোগ্রামটি দেখিঃ

#include <stdio.h>
#include <string.h>
int main ()
{
    char string1[] =  "Hello ";
    char string2[] = "World";
    strcpy(string1, string2);

    printf("%s\n", string1);
    printf("%s\n", string2);

    return 0;
}

এবার আমরা একটা প্রোগ্রাম লিখব, যেখানে একটা বাক্য থেকে কোন একটা বর্ণ কতবার আছে, তা বের করতে পারব। ইনপুট হিসেবে একটা বাক্য নিবে। তারপর নিবে কোন বর্ণটার সংখ্যা বের করতে হবে, তা। এবং পরে ঐ বর্ণটা কতবার রয়েছে, তা প্রিন্ট করবেঃ

#include <stdio.h>
#include <string.h>
int main(){
   char sentence[1000];
   char character;
   int i,count=0;
   printf("Enter a sentence: ");
   gets(sentence);
   printf("Enter a character to find frequency: ");
   scanf("%c",&character);

   for(i=0; sentence[i]!='\0';++i)
   {
       if(character==sentence[i])
           ++count;
   }
   printf("Frequency of %c = %d", character, count);
   return 0;
}

উপরের প্রোগ্রামটাতে প্রথমে ইজার থেকে একটা বাক্য ইনপুট নিচ্ছে gets দিয়ে। এরপর ইনপুট নিচ্ছে কোন কারেকটার / বর্ণটি কত বার রয়েছে, তা। এরপর for লুপ চালিয়ে আমরা বর্ণটি কাউন্ট করেছি। এরপর শেষে বর্ণটি কতবার রয়েছে, তা প্রিন্ট করেছি। for লুপে আমরা sentence[i]!=’\0′ ব্যবহার করেছি। এর মানে হচ্ছে for লুপটি ততক্ষণ পর্যন্ত চলবে, যতক্ষণ না নাল কারেকটারটি পায়। আর আমরা জানি প্রত্যেকটা স্ট্রিং অ্যারের শেষে একটা নাল কারেকটার থেকে।

Leave a Reply