C Programming

C- Strings in C Programming

স্ট্রিং হচ্ছে কারেকটার সেট। একটা ওয়ার্ড, একটা বাক্য, একটা প্র্যারাগ্রাফ, সব গুলোই স্ট্রিং। যেমন 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 <tring.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]!=’’ ব্যবহার করেছি। এর মানে হচ্ছে for লুপটি ততক্ষণ পর্যন্ত চলবে, যতক্ষণ না নাল কারেকটারটি পায়। আর আমরা জানি প্রত্যেকটা স্ট্রিং অ্যারের শেষে একটা নাল কারেকটার থেকে।

24 thoughts on “C- Strings in C Programming

  1. Hello, I think your site might be having browser compatibility issues. When I look at your website in Opera, it looks fine but when opening in Internet Explorer, it has some overlapping. I just wanted to give you a quick heads up! Other then that, wonderful blog!

  2. Hmm it appears like your blog
    ate my first comment (it was super long) so I
    guess I’ll just sum it up what I submitted and say, I’m thoroughly enjoying your blog.

    I too am an aspiring blog writer but I’m still
    new to everything. Do you have any suggestions
    for inexperienced blog
    writers? I’d certainly appreciate it.

  3. Nice post. I learn something more challenging on different blogs everyday. It will always be stimulating to read content from other writers and practice a little something from their store. I?d prefer to use some with the content on my blog whether you don?t mind. Natually I?ll give you a link on your web blog. Thanks for sharing.

  4. Oh my goodness! an amazing article dude. Thank you However I am experiencing issue with ur rss . Don?t know why Unable to subscribe to it. Is there anyone getting identical rss problem? Anyone who knows kindly respond. Thnkx

  5. I’ve been exploring for a little bit for any high-quality articles or weblog
    posts on this kind of space
    . Exploring in Yahoo I eventually
    stumbled upon this website. Studying this information So i
    am satisfied to exhibit that I have an incredibly just right uncanny feeling I found
    out exactly what I needed.
    I most unquestionably will make sure to do not overlook this site and
    give it
    a look on a constant basis.

  6. Can I just say what a relief to find someone who actually knows what theyre talking about on the internet. You definitely know how to bring an issue to light and make it important. More people need to read this and understand this side of the story. I cant believe youre not more popular because you definitely have the gift.

  7. An impressive share, I just given this onto a colleague who was doing a little analysis on this. And he in fact bought me breakfast because I found it for him.. smile. So let me reword that: Thnx for the treat! But yeah Thnkx for spending the time to discuss this, I feel strongly about it and love reading more on this topic. If possible, as you become expertise, would you mind updating your blog with more details? It is highly helpful for me. Big thumb up for this blog post!

Leave a Reply

Your email address will not be published. Required fields are marked *