শুক্রবার, ৯ মে, ২০১৪

স্ট্রিং



প্রোগ্রামিং করতে গেলে সবথেকে বেশী যেটা ব্যাবহার করা হয় সেটা হল স্ট্রিং। প্রোগ্রামিং এ বিভিন্ন প্রয়োজনে বিভিন্ন ম্যাসেজ দেখাতে হয়। আর একটা সফটওয়্যার বানাতে গেলে তো স্ট্রিং এর দোকান খুলে বসতে হয়। 

স্ট্রিং বলতে সাধারনভাবে আমরা বুঝি গ্রুপ অব ক্যারেক্টার। ক্যারেক্টার অ্যারে হচ্ছে ক্যারেক্টার টাইপের অনেকগুলো ভেরিয়েবল যেখানে অনেকগুলো ক্যারেক্টার একসাথে থাকে। তো স্ট্রিং এ অনেকগুলো ক্যারেক্টার একসাথে থাকে আবার ক্যারেক্টার অ্যারেতেও অনেকগুলো ক্যারেক্টার একসাথে থাকে। তাহলে স্ট্রিং আর ক্যারেক্টার অ্যারে একই জিনিস, তাই না? 

আসলে তা নয়। স্ট্রিং এ ক্যারেক্টার অ্যারের মত অনেকগুলো ক্যারেক্টার একসাথে থাকে ঠিকই কিন্তু স্ট্রিং এ ক্যারেক্টার গুলোর শেষে একটা নাল ক্যারেক্টার থাকে যেটা ক্যারেক্টার অ্যারে তে থাকে না। এটাই ক্যারেক্টার অ্যারে আর স্ট্রিং এর পার্থক্য। তার মানে ক্যারেক্টার অ্যারের শেষে একটা নাল ক্যারেক্টার যোগ করে সেটাকে স্ট্রিং বানিয়ে ফেলতে পারি। 
তাহলে স্ট্রিং এর declaration ক্যারেক্টার অ্যারের মতই, শুধু নাল ক্যারেক্টারের জন্য একটা স্পেস দরকার।

char str[100];

নিচের দুটো স্টেটমেন্ট একই। 

char str[7]=”string”;
char str[7]={‘s’,’t’,’r’,’I’,’n’,’g’,’\0’}; 

আমরা সবগুলো ক্যারেক্টার একসাথে লিখে সেটাকে ডাবল কোটেশন এর মধ্যে রেখে অ্যাসাইন করতে পারি আবার ক্যারেক্টার অ্যারের মত করে একটা একটা ক্যারেক্টার দিয়ে শেষে নাল ক্যারেক্টার দিয়ে দিতে পারি।
যদি স্ট্রিং এর সাইজ বড় হয় তবে অতিরিক্ত জায়গায় কম্পাইলার নাল ক্যারেক্টার দিয়ে দেয়। যেমনঃ

আমরা যদি লিখি- 

char str[6]=”abc”;

তাহলে কম্পাইলার সেটাকে নিচের মত করে নেয়। 

char str[5]={‘a’,’b’,’c’,’\0’,’\0’,’\0’};

স্ট্রিং ইনপুট নিতে হয় এভাবে-

scanf(“%s”,str);

এক্ষেত্রে স্পেস সহ স্ট্রিং ইনপুট নেয়া যায় না।
স্পেস সহ নিতে হলে-

scanf(“%[^\n]”,str);

অথবা 

gets(str);

স্ট্রিং প্রিন্ট করতে হলে-

printf(“%s”,str);

অথবা 

puts(str);

এক্ষেত্রে স্পেস সহ স্ট্রিং প্রিন্ট করা যায়। precision ব্যাবহার করে আমরা স্ট্রিং কে বিভিন্নভাবে প্রিন্ট করতে পারি। যেমনঃ
আমরা নিচের স্ট্রিং কে বিভিন্নভাবে প্রিন্ট করবো precision ব্যাবহার করে। 

char str[15]=”ilovestring”;

printf(“%s”,str); 

এক্ষেত্রে পুরো স্ট্রিং প্রিন্ট করবে।

printf(“%5s”,str); 

এক্ষেত্রে পুরো স্ট্রিং প্রিন্ট করবে।

printf(“%25s”,str);

এক্ষেত্রে পুরো স্ট্রিং প্রিন্ট করবে।

printf(“%10.3s”,str);

এক্ষেত্রে এক্ষেত্রে ১০ টা স্পেস নেবে এবং স্ট্রিং টার প্রথম ৩ টা ক্যারেক্টার প্রিন্ট করবে যেটা হবে right-justified.

printf(“%-10.3s”,str);

এক্ষেত্রে ১০ টা স্পেস নেবে এবং স্ট্রিং টার প্রথম ৩ টা ক্যারেক্টার প্রিন্ট করবে যেটা হবে left-justified.

printf(“%15.0s”,str);

এক্ষেত্রেকোন ক্যারেক্টার প্রিন্ট হবে না। 

printf(“%.3s”,str); 

এক্ষেত্রে শুধু প্রথম ৩ টা ক্যারেক্টার প্রিন্ট করবে।

একটা স্ট্রিং কে integer বানাতে হলে –

N=atoi(str);

str যদি হয়  “2014” তবে N=2014. atoi() ফাংশনের হেডারফাইল হল stdlib.h.

কিছু স্ট্রিং হ্যান্ডলিং ফাংশন আছে। সেগুলো নিয়ে আমরা এখন আলোচনা করবো। 

strlen();

স্ট্রিং এর দৈর্ঘ্য নির্ণয় করতে এই ফাংশন ব্যাবহার করা হয়। 

L=strlen(str);

এখানে L হল str স্ট্রিং এর দৈর্ঘ্য। 

strcat();

দুটো স্ট্রিংকে জোড়া লাগাতে এই ফাংশনের জুড়ি নেই। 

strcat(str1,str2);

এই ফাংশনটা str1 আর str2 কে জোড়া লাগিয়ে str1 এ রেখে দেয়। 

strncat();

strncat(str1,str2,n);

str2 হতে প্রথম n টা ক্যারেক্টার কে str1 এর সাথে concat করবে।

strcmp();

দুটো স্ট্রিং কে কম্পেয়ার করার জন্য ফাংশনটি ব্যাবহার করা হয়। 

strcmp(str1,str2);

তবে প্যারামিটার হিসেবে স্ট্রিং ভেরিয়েবল না দিয়ে স্ট্রিং ও দেয়া যায়। যদি str1 আর str2 সমান হয় তবে ফাংশনটি 0 রিটার্ন করবে, অন্যথায় প্রথম স্ট্রিং এর যে ক্যারেক্টার দ্বিতীয় স্ট্রিং এর যে ক্যারেক্টারের সাথে মিলবে না সেই দুই ক্যারেক্টারের ASCII মানের বিয়োগফল রিটার্ন করবে। 

strncmp();

পুরো স্ট্রিং কম্পেয়ার না করে স্ট্রিং এর কয়েকটা ক্যারেক্টার কম্পেয়ার করতে ফাংশনটা ইউস করা হয়।
strncmp(str1,str2,n);
str1 এর প্রথম n টা ক্যারেক্টারের সাথে str2 এর n টা ক্যারেক্টারকে কম্পেয়ার করবে। 

strcpy();

স্ট্রিং কপি করার জন্য এই ফাংশন ব্যাবহার করা হয়। 

strcpy(str1,str2);

str2 তে স্ট্রিং ভেরিয়েবল না দিয়ে স্ট্রিং ও দেয়া যায়। ফাংশনটি str2 কে কপি করে  str1 এ রেখে দেবে। এক্ষেত্রে str2 কে রাখার মত পর্যাপ্ত স্পেস str1 এ থাকতে হবে। 

strncpy();

এক্ষেত্রে পুরো স্ট্রিং কপি না করে স্ট্রিং এর কয়েকটা ক্যারেক্টার কপি করা হয়। 

strncpy(str1,str2,n);

str2 থেকে n টা ক্যারেক্টার str1 এ কপি হবে। এক্ষেত্রে যেহেতু str2 এর n টা ক্যারেক্টারের মধ্যে NULL ক্যারেক্টার নাও থাকতে পারে তাই সেটা আলাদা করে দিতে হবে। 

str[n]=’\0’;

এখানে n লিখলাম কারন n টা ক্যারেক্টার রাখা হয়েছে 0 থেকে
n-1পজিশন পর্যন্ত।

strstr();

সাবস্ট্রিং সার্চ করার জন্য এই ফাংশনটি ইউস করা হয়। 

strstr(str1,str2);

str2 যদি str1 এর সাবস্ট্রিং হয় তবে ফাংশনটি ওই সাবস্ট্রিং এর একটা পয়েন্টার রিটার্ন করে অন্যথায় NULLপয়েন্টার রিটার্ন করে।

strupr();

স্ট্রিং এর সব ক্যারেক্টার uppercase এ পরিনত করতে এই ফাংশনটা ইউস করা হয়।

strupr(str);

strlwr();

স্ট্রিং এর সব ক্যারেক্টার lowercase এ পরিনত করতে এই ফাংশনটা ইউস করা হয়।

strlwr(str);

স্ট্রিং শেষ। বেশী বেশী প্র্যাকটিস করতে হবে। প্র্যাকটিসের কোন বিকল্প নাই। টিউটোরিয়াল পড়ে তুমি হয়তো শিখতে পারবে কিন্তু প্রাকটিস না করলে সেগুলো ইমপ্লিমেন্ট করতে পারবে না। 
আর কোন কিছু না বুঝলে কমেন্ট করে জানাতে পার। সল্যুশন দেয়ার চেষ্টা করব ইনশাল্লাহ। 
 
হ্যাপি কোডিং !! :)

কোন মন্তব্য নেই: