beginner#stringUpdated: 2026-05-13

স্ট্রিং (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 = char Array + \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() দিয়ে দৈর্ঘ্য বের করা — এই দুটো ভালো করে অনুশীলন করো।