String
স্ট্রিং
স্ট্রিং (String)
১. ভূমিকা — তোমার নাম কীভাবে রাখে কম্পিউটার?
তোমার নাম "রাহিম"। এটা কি একটি সংখ্যা? না। একটি অক্ষর? না — এটা অনেকগুলো অক্ষরের সমষ্টি।
কম্পিউটার কীভাবে "রাহিম" রাখে?
'R' + 'a' + 'h' + 'i' + 'm' + '\0'
এই অক্ষরগুলোর সারি (sequence) হলো String (স্ট্রিং)।
C-তে String হলো char Array — কিন্তু বিশেষ নিয়ম মেনে চলে।
২. সমস্যা — একটি char দিয়ে পুরো নাম রাখা যায়?
char দিয়ে শুধু একটি অক্ষর রাখা যায়:
char ch = 'A'; // শুধু একটি
কিন্তু নাম, ঠিকানা, বাক্য রাখতে হলে অনেক অক্ষর দরকার।
String সেই সমাধান — char-এর Array হিসেবে পুরো শব্দ বা বাক্য রাখা যায়।
৩. চিত্রের মাধ্যমে বোঝো
char name[] = "Rahim";
Memory:
Index: [ 0 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ]
┌─────┬─────┬─────┬─────┬─────┬─────┐
name │ 'R' │ 'a' │ 'h' │ 'i' │ 'm' │'\0' │
└─────┴─────┴─────┴─────┴─────┴─────┘
'\0' = Null character (string শেষের চিহ্ন)
গুরুত্বপূর্ণ: "Rahim" = ৫ অক্ষর, কিন্তু রাখতে ৬ byte লাগে — শেষে \0 এর জন্য!
৪. বাস্তব জীবনের সাথে মিল
ট্রেনের বগি ভাবো, কিন্তু শেষে একটি লাল বগি:
name = "Rahim"
[R][a][h][i][m][শেষ]
0 1 2 3 4 5
শেষ বগি (index 5) = '\0' (Null Terminator)
→ এটা না থাকলে String কোথায় শেষ জানা যায় না!
Module 1: সংজ্ঞা ও ধারণা
String (স্ট্রিং) হলো char Data Type-এর Array যা Null character (\0) দিয়ে শেষ হয়।
Declaration:
char name[50]; // সর্বোচ্চ 49 অক্ষর + '\0'
char name[] = "Rahim"; // স্বয়ংক্রিয় আকার
char name[10] = "Rahim"; // নির্দিষ্ট আকার
Input/Output:
scanf("%s", name); // একটি শব্দ (space-এ থামে)
fgets(name, 50, stdin); // পুরো লাইন (space সহ)
printf("%s", name);
puts(name); // println এর মতো
গুরুত্বপূর্ণ string.h ফাংশন:
| ফাংশন | কাজ | উদাহরণ |
|---|---|---|
strlen(s) | দৈর্ঘ্য | strlen("Rahim") = 5 |
strcpy(dest, src) | কপি | strcpy(a, b) |
strcat(dest, src) | জোড়া লাগানো | strcat(a, b) |
strcmp(s1, s2) | তুলনা | 0 হলে সমান |
strupr(s) | বড় হাত | strupr("hello") = "HELLO" |
strlwr(s) | ছোট হাত | strlwr("HELLO") = "hello" |
Module 2: কীভাবে কাজ করে
strlen("Rahim") কীভাবে কাজ করে?
char s[] = "Rahim";
→ index 0 থেকে শুরু
→ প্রতিটি char পরীক্ষা করো
→ '\0' পাওয়া পর্যন্ত গণনা বাড়াও
'R'→count=1, 'a'→2, 'h'→3, 'i'→4, 'm'→5, '\0'→থামো
→ return 5
strcmp("abc", "abd") কীভাবে কাজ করে?
প্রতিটি অক্ষর তুলনা:
'a' vs 'a' → সমান
'b' vs 'b' → সমান
'c' vs 'd' → 'c'(99) < 'd'(100)
→ return negative (-1)
Module 3: প্যাটার্ন ও উদাহরণ
প্যাটার্ন ১: String Declaration ও I/O
উদাহরণ ১.১: সাধারণ String
#include <stdio.h>
int main() {
char name[] = "Bangladesh";
char city[] = "Dhaka";
printf("দেশ: %s\n", name);
printf("শহর: %s\n", city);
printf("দেশ: %s, শহর: %s\n", name, city);
return 0;
}
আউটপুট:
দেশ: Bangladesh
শহর: Dhaka
দেশ: Bangladesh, শহর: Dhaka
উদাহরণ ১.২: ইনপুট ও আউটপুট
#include <stdio.h>
int main() {
char name[50];
printf("তোমার নাম: ");
scanf("%s", name);
printf("হ্যালো, %s! তুমি ভালো আছো?\n", name);
return 0;
}
উদাহরণ ১.৩: পুরো নাম ইনপুট (space সহ)
#include <stdio.h>
int main() {
char fullName[100];
printf("পুরো নাম: ");
fgets(fullName, sizeof(fullName), stdin);
printf("তোমার নাম: %s", fullName);
return 0;
}
প্যাটার্ন ২: strlen — দৈর্ঘ্য বের করা
উদাহরণ ২.১: String-এর দৈর্ঘ্য
#include <stdio.h>
#include <string.h>
int main() {
char s1[] = "Hello";
char s2[] = "Bangladesh";
char s3[] = "HSC ICT";
printf("'%s' এর দৈর্ঘ্য: %d\n", s1, (int)strlen(s1));
printf("'%s' এর দৈর্ঘ্য: %d\n", s2, (int)strlen(s2));
printf("'%s' এর দৈর্ঘ্য: %d\n", s3, (int)strlen(s3));
return 0;
}
আউটপুট:
'Hello' এর দৈর্ঘ্য: 5
'Bangladesh' এর দৈর্ঘ্য: 10
'HSC ICT' এর দৈর্ঘ্য: 7
উদাহরণ ২.২: ইনপুট করা String-এর দৈর্ঘ্য
#include <stdio.h>
#include <string.h>
int main() {
char word[100];
printf("একটি শব্দ লেখো: ");
scanf("%s", word);
printf("'%s' এর দৈর্ঘ্য = %d\n", word, (int)strlen(word));
return 0;
}
প্যাটার্ন ৩: strcpy ও strcat
উদাহরণ ৩.১: strcpy — String কপি
#include <stdio.h>
#include <string.h>
int main() {
char source[] = "Hello, World!";
char dest[50];
strcpy(dest, source);
printf("source: %s\n", source);
printf("dest: %s\n", dest);
return 0;
}
আউটপুট:
source: Hello, World!
dest: Hello, World!
উদাহরণ ৩.২: strcat — String জোড়া দেওয়া
#include <stdio.h>
#include <string.h>
int main() {
char first[50] = "হ্যালো, ";
char last[] = "রাহিম!";
strcat(first, last);
printf("%s\n", first);
return 0;
}
আউটপুট:
হ্যালো, রাহিম!
উদাহরণ ৩.৩: পুরো নাম তৈরি
#include <stdio.h>
#include <string.h>
int main() {
char firstName[30], lastName[30], fullName[60];
printf("প্রথম নাম: ");
scanf("%s", firstName);
printf("শেষ নাম: ");
scanf("%s", lastName);
strcpy(fullName, firstName);
strcat(fullName, " ");
strcat(fullName, lastName);
printf("পুরো নাম: %s\n", fullName);
printf("দৈর্ঘ্য: %d\n", (int)strlen(fullName));
return 0;
}
প্যাটার্ন ৪: strcmp — String তুলনা
উদাহরণ ৪.১: দুটি String সমান কিনা
#include <stdio.h>
#include <string.h>
int main() {
char s1[] = "Hello";
char s2[] = "Hello";
char s3[] = "World";
if (strcmp(s1, s2) == 0)
printf("'%s' এবং '%s' সমান\n", s1, s2);
else
printf("'%s' এবং '%s' ভিন্ন\n", s1, s2);
if (strcmp(s1, s3) == 0)
printf("'%s' এবং '%s' সমান\n", s1, s3);
else
printf("'%s' এবং '%s' ভিন্ন\n", s1, s3);
return 0;
}
আউটপুট:
'Hello' এবং 'Hello' সমান
'Hello' এবং 'World' ভিন্ন
উদাহরণ ৪.২: পাসওয়ার্ড যাচাই
#include <stdio.h>
#include <string.h>
int main() {
char storedPass[] = "abc123";
char inputPass[50];
printf("পাসওয়ার্ড দাও: ");
scanf("%s", inputPass);
if (strcmp(inputPass, storedPass) == 0)
printf("লগইন সফল!\n");
else
printf("ভুল পাসওয়ার্ড!\n");
return 0;
}
প্যাটার্ন ৫: Character-by-Character Processing
উদাহরণ ৫.১: প্রতিটি অক্ষর আলাদা করা
#include <stdio.h>
#include <string.h>
int main() {
char word[] = "HELLO";
int i, len = strlen(word);
for (i = 0; i < len; i++) {
printf("word[%d] = '%c'\n", i, word[i]);
}
return 0;
}
আউটপুট:
word[0] = 'H'
word[1] = 'E'
word[2] = 'L'
word[3] = 'L'
word[4] = 'O'
উদাহরণ ৫.২: Vowel গণনা
#include <stdio.h>
#include <string.h>
int main() {
char s[100];
int i, count = 0;
printf("একটি শব্দ দাও: ");
scanf("%s", s);
for (i = 0; s[i] != '\0'; i++) {
char c = s[i];
if (c=='a' || c=='e' || c=='i' || c=='o' || c=='u' ||
c=='A' || c=='E' || c=='I' || c=='O' || c=='U') {
count++;
}
}
printf("Vowel সংখ্যা: %d\n", count);
return 0;
}
উদাহরণ ৫.৩: String উল্টো করা (Reverse)
#include <stdio.h>
#include <string.h>
int main() {
char s[] = "Bangladesh";
int len = strlen(s);
int i;
printf("আগে: %s\n", s);
// উল্টো করা
char temp;
int left = 0, right = len - 1;
while (left < right) {
temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
printf("পরে: %s\n", s);
return 0;
}
আউটপুট:
আগে: Bangladesh
পরে: hsedalagnaB
Module 4: বাস্তব প্রয়োগ
| প্রয়োগ | String |
|---|---|
| ব্যবহারকারীর নাম রাখা | char username[50] |
| পাসওয়ার্ড যাচাই | strcmp() |
| ফর্মের তথ্য | নাম, ঠিকানা |
| অনুসন্ধান | strstr() — খোঁজা |
| ফাইল পথ | char path[200] |
| SMS বার্তা | String Array |
Module 5: সাধারণ ভুল ও সতর্কতা
ভুল ১: == দিয়ে String তুলনা
❌ ভুল:
if (s1 == s2) // Address তুলনা করে, Content নয়!
✅ সঠিক:
if (strcmp(s1, s2) == 0) // Content তুলনা করে
ভুল ২: Array Size ছোট রাখা
❌ ভুল:
char name[5] = "Rahimuddin"; // 10 অক্ষর + '\0' — overflow!
✅ সঠিক:
char name[20] = "Rahimuddin"; // যথেষ্ট বড় করো
ভুল ৩: '\0' ভুলে যাওয়া
❌ ভুল:
char s[5];
s[0]='H'; s[1]='i';
printf("%s\n", s); // '\0' নেই — garbage output!
✅ সঠিক:
s[0]='H'; s[1]='i'; s[2]='\0';
printf("%s\n", s); // "Hi"
ভুল ৪: strcpy ছাড়া Assignment
❌ ভুল:
char s[50];
s = "Hello"; // Error! Array-এ এভাবে assign করা যায় না
✅ সঠিক:
strcpy(s, "Hello");
Module 6: সুবিধা-অসুবিধা
| Method | সুবিধা | সীমাবদ্ধতা |
|---|---|---|
scanf("%s") | সহজ | Space সহ ইনপুট নেয় না |
fgets() | Space সহ পুরো লাইন | শেষে \n যোগ হয় |
strlen() | সহজ দৈর্ঘ্য | প্রতিবার পুরো String স্ক্যান |
strcmp() | নিরাপদ তুলনা | == ব্যবহার করা যাবে না |
🔁 নিজে পরীক্ষা করো
MCQ:
১. C-তে String কীভাবে শেষ হয়?
- ক)
\t - খ)
\0✓ - গ)
\n - ঘ)
EOF
২. char name[10] = "Rahim"; — name[5]-এর মান কী?
- ক) 'm'
- খ) '\0' ✓
- গ) ' '
- ঘ) Error
৩. দুটি String তুলনার জন্য কোন Function?
- ক)
strcpy() - খ)
strcmp()✓ - গ)
strcat() - ঘ)
strlen()
৪. strlen("Bangladesh") = ?
- ক) 9
- খ) 10 ✓
- গ) 11
- ঘ) 8
৫. Space-সহ পুরো লাইন ইনপুট নিতে কোনটি ব্যবহার করবে?
- ক)
scanf("%s") - খ)
fgets()✓ - গ)
gets() - ঘ)
scanf("%c")
সংক্ষিপ্ত প্রশ্ন:
৬. strlen, strcpy, strcat, strcmp — প্রতিটি ফাংশনের কাজ উদাহরণসহ লেখো।
৭. একটি String ইনপুট নাও এবং তাতে কতটি vowel আছে তা বের করার C প্রোগ্রাম লেখো।
📝 HSC পরীক্ষার প্রস্তুতি
১. String-এ শেষে \0 কেন দরকার? যদি না থাকে, কী সমস্যা হয়?
২. strcmp(s1, s2) ফলাফল 0, ধনাত্মক, ঋণাত্মক — এই তিনটির অর্থ কী?
৩. C-তে string type নেই, char array আছে — এটা কি সমস্যা? Python, Java-তে কীভাবে String কাজ করে?
🎯 অনুশীলন প্রশ্ন
সহজ: একটি নাম ইনপুট নাও এবং দেখাও: নামের দৈর্ঘ্য, বড় হাতে, ছোট হাতে।
মাঝারি: দুটি শব্দ ইনপুট নাও। তারা palindrome কিনা পরীক্ষা করো। (যেমন: "madam" উল্টো করলেও "madam")
কঠিন: একটি বাক্য ইনপুট নাও। কতটি শব্দ আছে, কতটি vowel আছে, এবং সবচেয়ে বড় শব্দটি কী — সব বের করো।
✅ সারাংশ
🎯 মনে রেখো:
- String =
charArray +\0(Null Terminator) "Rahim"= 5 অক্ষর, কিন্তু 6 byte লাগে (\0এর জন্য)- string.h অবশ্যই include করো
strlen()= দৈর্ঘ্য (null বাদে)strcpy()= copy (assignment=কাজ করে না)strcat()= জোড়া লাগানোstrcmp()= তুলনা (0 = সমান,==ব্যবহার নয়!)scanf("%s")→ space-এ থামেfgets()→ পুরো লাইন নেয়
💡 পরীক্ষার টিপস: String function-গুলোর ব্যবহার HSC-তে প্রায়ই আসে।
strcmp()দিয়ে String তুলনা এবংstrlen()দিয়ে দৈর্ঘ্য বের করা — এই দুটো ভালো করে অনুশীলন করো।