Sunday, June 24, 2018

String

স্ট্রিং নিয়ে কারসাজি........ 

যাদের Character Array সম্পর্কে ধারণা আছে তারা স্ট্রিং খুব সহজেই বুঝতে পারবে। আমি এই পোস্টে স্ট্রিংয়ের ডেফিনিশনে যাবো না; স্ট্রিং নিয়ে কিছু টুকিটাকি আলোচনা করবো যা তোমাকে যে কোনো প্রোগ্রামিং প্রতিযোগিতায় অনেক এগিয়ে রাখবে। 

char a[100];
int n;
scanf("%d", &n);
gets(a);

উপরের মতো করে scanf() দিয়ে ইনপুট নেয়ার পর gets() দিয়ে Character Array তে ইনপুট নেয়ার ক্ষেত্রে সমস্যায় পড়তে হয়। নিচের নিয়মে এই সমস্যা এড়ানো যায়।
scanf("%d", &n);
getchar();  ->এভাবে scanf() ও gets() এর মাঝে getchar() দিতে হবে। 
gets(a);

space সহ সম্পূর্ণ স্ট্রিং কিভাবে ইনপুট নিবো??? এটি একটি কমন ইস্যুপ্রোগ্রামিং প্রতিযোগিতায় অনেক সময় space সহ স্ট্রিং ইনপুট নিতে হয়। তরুণ প্রতিযোগীদের এটি অনেক ভোগায়।
string s;

মনেকর, s একটি স্ট্রিং। এখন সি++ এ cin দিয়ে s স্ট্রিং space সহ ইনপুট নিলে, s স্ট্রিং এ প্রথম স্পেস এর আগের অংশ স্টোর হবে; সম্পূর্ণ স্ট্রিং স্টোর হবে না। getline() function ব্যবহার করে আমরা এই সমস্যাটি সমাধান করতে পারি। getline() দিয়ে s স্ট্রিংটি ঠিক এই ভাবে ইনপুট নিতে হবে- getline(cin, s, '\n');
char a[100];
আবার মনেকর, a একটি character array। scanf() দিয়ে character array টিতে space সহ ইনপুট নিলেও একই সমস্যায় পড়তে হবে, প্রথম space এর আগের অংশটুকু character array টিতে স্টোর হবে। এই ক্ষেত্রে ইনপুট নিতে হবে এই ভাবে- cin.getline(a, 99);

প্রোগ্রামিং প্রতিযোগিতায় cin, cout এর ব্যবহার সীমিত রাখাই ভাল। Character Array a কে দেখানোর জন্য printf() ব্যবহার করা গেলেও স্ট্রিং s কে দেখানোর জন্য শুধু printf() ব্যবহার করলে চলবে না। স্ট্রিং s কে printf() এর মাধ্যমে দেখাতে হবে এইভাবে-
printf("%s", s.c_str()); 

লুপ ছাড়াই কপি!!! একটি Character Array থেকে অন্য Character Array তে ডাটা ট্রান্সফারের জন্য আমাদের লুপ এর সাহায্য নিতে হয়। স্ট্রিং এ এইসব ঝক্কি-ঝামেলা  নেই।
string s1, s2;
স্ট্রিং s1 থেকে s2 তে ডাটা ট্রান্সফার করবো এইভাবে- 
s2=s1;
স্ট্রিং এ কতটি ক্যারেক্টার আছে তা size() ও length() দিয়ে সহজেই বের করা যায়।

Code:
 

/*  String Input */

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int main()
{
    char a[100], b[100];
    int num1, num2;
    string s1, s2, s3;
    /*when we get any string using white space, variable:a will store string before
    white space & string after white space will be stored into variable:b*/
    printf("Enter a:");
    scanf("%s", a);
    printf("Enter b:");
    scanf("%s", b);
    printf("%s\n%s\n", a,b);
    /*When we use get function after any integer input, enter button pressed by user
    stored as string to solve is problem, we use getchar() function between two input*/
    scanf("%d", &num1);
    gets(a);
    printf("%d %s\n", num1, a);
    scanf("%d", &num2);
    getchar();
    gets(b);
    printf("%d %s\n", num2, b);
    /*When we get any string using cin, it also stores before white space*/
    /*cin>>s1;
    cout<<s1;*/
    getline(cin, s2, '\n');  //This is used to get a line as string
    /*Definition: getline(cin, string_variable, delimiter_char)
    this is used for string type variable, not for char array */
    cout<<s2; //we can't use printf() function here
    /*We get input in char array as string using white space by following method*/
    cin.getline(a, 15);  //Definition: cin.getline(char_array, size-1)
    printf("%s\n", a); //we can use cout as well
    int l1=s2.size();
    printf("%d\n", l1);
    int l2=s2.length();
    printf("%d", l2);
    s3=s2; //we directly store string one variable to another
    cout<<s3;
    /*We can get char_array as input & convert it into string by following*/
    char c[100];
    scanf("%s", c);
    string s4= string(c);
    cout&lt<s4;
    printf("\n%s", s3.c_str());  //we can print string by printf() by this method
    return 0;
}

 স্ট্রিং ম্যানিপুলেশন  নিয়ে নিচের কোডটি দেখতে পারো-

/*  String Manipulation */

#include<cstdio>
#include<string>
using namespace std;
int main()
{
    string s1, s2, s3;
    s1="abcdefgh";
    printf("%s\n", s1.c_str());
    s2=s1.substr(3);
    printf("%s\n", s2.c_str());
    s3=s1.substr(4,3);
    printf("%s\n", s3.c_str());
    s2[1]='P';
    printf("%s\n", s2.c_str());
    return 0;
}

No comments:

Post a Comment