count the length of a sentence ( string strlen function)
#include<stdio.h>
#include<string.h>
int main(){ char a[50]; scanf("%s",a); int l=strlen(a); printf("Length = %d\n",l); return 0;}
#include<stdio.h>
#include<string.h>
int main(){ char a[50]; scanf("%s",a); int l=strlen(a); printf("Length = %d\n",l); return 0;}
#### function name : strupr
একটি স্ট্রিং এ capital letter কে small letter এ পরিনিত করতে ব্যবহিত হয় ।
#include<stdio.h>
int main()
{
char ch[100];
printf("ENter the number = ");
gets(ch);
strupr(ch);
printf("%s",ch);
return 0;
}
#### function name : strrev
একটি স্ট্রিং কে উলট করতে ব্যবহিত হয় ।
#include<stdio.h>
int main()
{
char ch[100];
printf("ENter the number = ");
gets(ch);
strrev(ch);
printf("%s",ch);
return 0;
}
#### function name : strrev
একটি স্ট্রিং এ small letter কে capital letter এ পরিনিত করতে ব্যবহিত হয় । ।
#include<stdio.h>
int main()
{
char ch[100];
printf("ENter the number = ");
gets(ch);
strlwr(ch);
printf("%s",ch);
return 0;
}
#include<stdio.h>
#include<string.h>
int main()
{
char a[50]="abcdef";
char b[50];
strcpy(b,a);
printf("%s\n",a);
printf("%s\n",b);
return 0;
}
#include<stdio.h>
#include<string.h>
int main()
{
char a[50];
scanf("%s",a);
int l=strlen(a);
printf("Length = %d\n",l);
return 0;
}
#include<stdio.h>
#include<string.h>
int main()
{
char a[50]="abcdef";
char b[50]="ghijkl";
strcat(a,b);
printf("%s \n",a);
return 0;
}
#include<stdio.h>
int main()
{
char a[100];
scanf("%s",a);
strcat(a," Bangladesh");
printf("%s",a);
return 0;
}
#include<stdio.h>
#include<string.h>
int main()
{
char a[100],b[100];
int x;
gets(a);
gets(b);
x = strcmp(a,b);
if(x!=0)
{
printf("string are not equal");
}
else
{
printf("string are equal");
}
return 0;
}
#include<stdio.h>
int main()
{
char str [100];
scanf("%[a-z]",str);
printf("%s",str);
return 0;
}
#include<stdio.h>
int main()
{
char str [100];
scanf("%[A-Z a-z0-9]",str);
printf("%s",str);
return 0;
}
#include<stdio.h>
int main()
{
char str [100];
scanf("%[^a]",str);
printf("%s",str);
return 0;
}
#include<stdio.h>
int main()
{
char ch[100];
while(gets(ch))
{
if(ch[0]=='\0')
break;
printf("%s\n",ch);
}
return 0;
}
#include<stdio.h>
int main()
{
char ch[10];
int i=0;
ch[0]='E';
ch[1]='W';
ch[2]='U';
ch[3]='B';
ch[4]='A';
ch[5]='N';
ch[6]='G';
ch[7]='L';
ch[8]='A';
while(ch[i]!='B')
{
printf("%c",ch[i]);
i++;
}
}
#include<stdio.h>
int main()
{
char ch[10];
int i=0;
ch[0]='E';
ch[1]='W';
ch[2]='U';
ch[3]='\0';
ch[4]='A';
ch[5]='N';
ch[6]='G';
ch[7]='L';
ch[8]='A';
printf("%s",ch);
}
#include<stdio.h>
int main()
{
char ch[100]="ewu bangla";
int i;
printf("%c",ch[5]);
return 0;
}
কিছু প্রোগ্রাম example হিসেবে দেওয়া হল :
EXAmple 1:
stacat function এর মাধ্যমে ২টা string কে এক সাথে জোড়া লাগান যায় এবং stalen function এর মাধ্যমে length পরিমাপ করা যায় .
#include<stdio.h>
#include<string.h>
int main()
{
char a[50]="BANGLA";
char b[50]="desh";
strcat(a,b);
printf("%s and length is %d\n",a,strlen(a));
return 0;
}
EXAmple 2 : এই problem টা তে তুমি কোন word টা কে reverse করতে চাও তা বলে দিলে, program টি reverse করে দেখবে ।
#include<stdio.h>
int main()
{
char str[30]="bangla",str_new[30];
int i,j;
for(i=5,j=0;i>=0;i--)
{
str_new[j]=str[i];
j++;
}
str_new[j]='\0';
printf("%s",str_new);
printf("\n");
}
EXAmple 3 : strcpy function টা এক variableএর মান কে অন্য variable এ কপি করতে পারবে
#include<stdio.h>
#include<string.h>
int main()
{
char a[50]="abcdef";
char b[50];
strcpy(b,a);
printf("%s\n",a);
printf("%s\n",b);
return 0;
}
EXample 3:
#include<stdio.h>
#include<string.h>
int main()
{
char name[3][10];
int i;
for(i=0;i<3;i++)
{
scanf("%s",name[i]);
}
for(i=0;i<3;i++)
{
printf("%s\n",name[i]);
}
}
কিছু প্রোগ্রামিংexample হিসেবে দেওয়া হল ।
EXample 1;
STring এ Input হিসেবে scanf বা %s ব্যবহারের একটি সমস্যা হচ্ছে স্ট্রিংয়ে কোনো হোয়াইটস্পেস ক্যারেক্টার (যেমন: স্পেস, ট্যাব ইত্যাদি) থাকা যাবে না, এমন কিছু পেলে scanf ওই ক্যারেক্টার পর্যন্ত একটি স্ট্রিং ধরে নেয়। যেমন, ইনপুট যদি হয় this is তবে scanf প্রথমে thisকেই স্ট্রিং হিসেবে নেবে, তারপরে যদি আবার scanf ফাংশন কল করা হয়, তবে isকে সে স্ট্রিং হিসেবে ইনপুট নিয়ে নেবে।
এই সমস্যা এড়ানোর জন্য আমরা gets ফাংশন ব্যবহার করতে পারি। নিচের উদাহরণটি দেখো:
#include<stdio.h>
int main()
{
char str[30];
// gets(str);
// puts(str);
scanf("%s",str);
printf("%s",str);
return 0;
}
#include<stdio.h>
int main()
{
char str[30];
gets(str);
puts(str);
// scanf("%s",str);
// printf("%s",str);
return 0;
}
যদি scanf দিয়ে লিখতে চাও তবে নিচের নিয়মে লিখতে হবে ।
#include<stdio.h>
int main()
{
char str[30];
scanf("%[^\n]",str);
printf("%s\n",str);
return 0;
}
EXample :2
কোন string এর length বাহির করার জন্য strlen() function use করতে হয় ।
#include<stdio.h>
#include<string.h>
int main()
{
char a[50];
scanf("%s",a);
int len=strlen(a);
printf("Length = %d\n",len);
return 0;
}
function ছাড়া ও তুমি নিচের way তে বের করতে পার .
#include<stdio.h>
int main()
{
char str[30];
int i,length=0;
gets(str);
for(i=0;str[i]!='\0';i++)
{
length=length+1;
}
printf("length of %s is %d\n",str,length);
}
Example 3 :
এখানে আমরা তিনটা ক্যারেক্টার এর ARRAY (2D array) রাখছি , যেখানে প্রত্যেকটা character এর length হচ্ছে ১০.
#include<stdio.h>
#include<string.h>
int main()
{
char name[3][10] = {"shadhin","jahid",{'p' , 'e', 'r', 'v', 'e', 'z'}};
int i;
for(i=0;i<3;i++)
{
printf("%s\n",name[i]);
}
}
Example 4: এই problem টা তে তুমি কোন word টা কে reverse করতে চাও এবংতার length বলে দিলে, program টি reverse করে দেখবে ।
#include<stdio.h>
int main()
{
char str[30];
int n,i;
gets(str);
scanf("%d",&n);
for(i=n;i>=0;i--)
{
printf("%c",str[i]);
}
printf("\n");
return 0;
}
আমাদের পরবর্তী প্রোগ্রামের লক্ষ্য হবে দুটি স্ট্রিং জোড়া দেওয়া বা concatenate করা। যেমন একটি স্ট্রিং যদি হয় "bangla" এবং আরেকটি স্ট্রিং যদি হয় "desh" তবে দুটি জোড়া দিয়ে "bangladesh" বানাতে হবে।
#include<stdio.h>
int main()
{
char a[30]="Bangla",b[30]="desh";
int i,j;
for(i=6,j=0;b[j]!='\0';j++)
{
a[i]=b[j];
i++;
}
a[i]='\0';
printf("%s\n",a);
}
স্ট্রিংয়ের বেসিক জিনিসগুলো নিয়ে আলোচনা করলাম। তবে মজার ব্যাপার হচ্ছে সি ল্যাঙ্গুয়েজে একটি হেডার ফাইল আছে, যার নাম string.h এবং ওইখানে বেশিরভাগ স্ট্রিং-সংক্রান্ত কাজের জন্য ফাংশন তৈরি করে দেওয়া আছে (যেমন: strcmp, strlen, strcpy ইত্যাদি)।
এখন আমরা আরেকটি প্রোগ্রাম লিখব যেটি ইনপুট হিসেবে একটি স্ট্রিং নেবে (যেখানে অনেকগুলো শব্দ থাকবে)। এই স্ট্রিংয়ের সর্বোচ্চ দৈর্ঘ্য হবে 1000 । শব্দগুলোর মাঝখানে এক বা একাধিক স্পেস থাকবে। আউটপুট হিসেবে প্রতিটি শব্দ আলাদা লাইনে প্রিন্ট করতে হবে। বিরামচিহ্নগুলো (punctuation) প্রিন্ট করা যাবে না এবং শব্দের প্রথম অক্ষর হবে বড় হাতের।
অনেক শর্ত দিয়ে ফেললাম। তবে প্রোগ্রামটি খুব কঠিন কিছু নয়। নিজে নিজে চেষ্টা করতে পারো। আর না পারলে এখন চলো দেখি কীভাবে সমাধান করা যায়।
প্রথম কথা হচ্ছে, ইনপুট নেব কীভাবে? বুঝতেই পারছ যে ইনপুটে যেহেতু স্পেস থাকবে, scanf("%s") ব্যবহার করা যাবে না। তাই আমরা gets() ব্যবহার করব। তার পরের কথা হচ্ছে একটি শব্দে কোন কোন ক্যারেক্টার থাকতে পারে? যেহেতু বলা নেই, আমরা ধরে নিই 'a' থেকে 'z', 'A' থেকে 'Z' আর '0' থেকে '9' থাকবে।
তার পরের প্রশ্ন হচ্ছে, আমরা কখন বুঝব বা আমাদের প্রোগ্রামকে কীভাবে বোঝাবো যে একটি শব্দ শুরু হয়েছে?-এর জন্য আমরা একটি ভেরিয়েবল রাখতে পারি। ভেরিয়েবলের নাম যদি দিই is_word_started তাহলে এর মান 0 হলে বুঝব শব্দ শুরু হয়নি, শব্দ শুরু হলে এর মান আমরা 1 করে দেব। আবার শব্দ শেষ হলে 0 করে দেব। যখন দেখব শব্দ শুরু হয়ে গেছে (is_word_started-এর মান 1) কিন্তু কোনো ক্যারেক্টারের মান 'a' – 'z' বা 'A' – 'Z', বা '0' – '9' এই রেঞ্জের মধ্যে নেই, তখনই বুঝব শব্দটি শেষ। তোমরা যদি এর আগে প্রোগ্রামটি চেষ্টা করার পরও লিখতে না পারো, এখন চেষ্টা করলে পারবে আশা করি। আমি এখন কোডটি লিখে দেব তবে সেটি দেখার আগে অবশ্যই নিজে করার চেষ্টা করতে হবে।
#include <stdio.h>
#include <string.h>
int main()
{
char s[1002], word[100];
int i, j, length, is_word_started;
gets(s);
length = strlen(s);
is_word_started = 0;
for (i = 0, j = 0; i < length; i++) {
if (s[i] >= 'a' && s[i] <= 'z') {
if (is_word_started == 0) {
is_word_started = 1;
word[j] = 'A' + s[i] - 'a'; // first character is capital
j++;
}
else {
word[j] = s[i];
j++;
}
}
else if (s[i] >= 'A' && s[i] <= 'Z') {
if (is_word_started == 0) {
is_word_started = 1;
}
word[j] = s[i];
j++;
}
else if (s[i] >= '0' && s[i] <= '9') {
if (is_word_started == 0) {
is_word_started = 1;
}
word[j] = s[i];
j++;
}
else {
if (is_word_started == 1) {
is_word_started = 0;
word[j] = '\0';
printf("%s\n", word);
j = 0;
}
}
}
return 0;
}
প্রোগ্রামটি বুঝতে কি একটু সমস্যা হচ্ছে? আগে প্রোগ্রামটি চটপট কম্পিউটারে টাইপ করে ফেলো, কম্পাইল ও রান করো। যারা লিনাক্স ব্যবহার করছ তারা gets() ব্যবহারের কারণে কম্পাইলার থেকে একটি সতর্ক সংকেত (warning) পেতে পারো, পাত্তা দিয়ো না।
ইনপুট হিসেবে যেকোনো কিছু লিখতে পারো। যেমন: This is a test.। আউটপুট কী?
আউটপুট হচ্ছে এই রকম:
This
Is
A
কী মুশকিল! test গেল কোথায়?
এখন তোমার কাজ হবে test-এর নিখোঁজ হওয়ার রহস্যটা তদন্ত করা। তারপর আমি প্রোগ্রামটি ব্যাখ্যা করব।
তোমরা দেখো প্রোগ্রামে আমি স্ট্রিংয়ের দৈর্ঘ্য নির্ণয়ের জন্য strlen ফাংশন ব্যবহার করেছি। আর-এর জন্য আমাকে string.h হেডার ফাইলটি include করতে হয়েছে। ইনপুট হিসেবে স্ট্রিংটা নিলাম s-এ। আর word রাখার জন্য একটি অ্যারে ডিক্লেয়ার করে রেখেছি। তারপর আমি i = 0 থেকে length পর্যন্ত একটি লুপ চালিয়েছি s-এর ভেতরের প্রতিটি ক্যারেক্টার পরীক্ষা করার জন্য।
if (s[i] >= 'a' && s[i] <= 'z') দিয়ে পরীক্ষা করলাম এটি ছোট হাতের অক্ষর নাকি। যদি ছোট হাতের অক্ষর হয় তবে একটি শব্দের প্রথম অক্ষর কি না সেটি জানতে হবে। কারণ প্রথম অক্ষর হলে ওটাকে আবার বড় হাতের অক্ষরে রূপান্তর করতে হবে। সেই পরীক্ষাটা আমরা করেছি: if (is_word_started == 0) দিয়ে। এটি সত্য হওয়া মানে শব্দ শুরু হয়নি, এটিই প্রথম অক্ষর। তাই আমরা is_word_started-এর মান 1 করে দেব। আর word[j]তে s[i]-এর বড় হাতের অক্ষরটা নেব। তারপর j-এর মান এক বাড়াতে হবে। else if (s[i] >= 'A' && s[i] <= 'Z') এবং else if (s[i] >= '0' && s[i] <= '9') এই দুটি শর্তের ভেতরেই আমরা একই কাজ করি। s[i]কে word[j]তে কপি করি। তাই চাইলে দুটি শর্তকে একসঙ্গে এভাবেও লিখতে পারতাম: else if ((s[i] >= 'A' && s[i] <= 'Z') || (s[i] >= '0' && s[i] <= '9')) তার পরের else-এর ভেতরে ঢোকার মানে হচ্ছে আগের if এবং else if-এর শর্তগুলো মিথ্যা হয়েছে। তাই s[i]-এর ভেতরে যেই ক্যারেক্টার আছে সেটি word-এ রাখা যাবে না। এবং যদি word ইতিমধ্যে শুরু হয়ে গিয়ে থাকে, সেটি শেষ করতে হবে এবং wordটি প্রিন্ট করতে হবে। আর যদি word শুরু না হয়ে থাকে তাহলে কিছু করার দরকার নেই।
else {
if (is_word_started == 1) {
is_word_started = 0;
word[j] = '\0';
printf("%s\n", word);
j = 0;
}
}
তোমরা কি test-রহস্য সমাধান করতে পেরেছ? তোমরা চেষ্টা করতে থাকো আর আমি এখন প্রোগ্রামটি অন্যভাবে লিখব (এর সঙ্গে test রহস্যের কোনো সম্পর্ক নেই সেটি বলে রাখলাম)।
এখন আমি যেটি করব, প্রোগ্রামটি এমনভাবে লিখব যাতে word অ্যারেটিই ব্যবহার করতে না হয়! একটু চিন্তা করে দেখো। আসলে তো এই অ্যারেটি নিয়ে আমরা কিছু করছি না প্রিন্ট করা ছাড়া। তাই এর আসলে কোনো দরকার নেই।
#include <stdio.h>
#include <string.h>
int main()
{
char s[1002], ch;
int i, length, is_word_started;
gets(s);
length = strlen(s);
is_word_started = 0;
for (i = 0; i < length; i++) {
if (s[i] >= 'a' && s[i] <= 'z') {
if (is_word_started == 0) {
is_word_started = 1;
ch = 'A' + s[i] - 'a';
printf("%c", ch);
}
else {
printf("%c", s[i]);
}
}
else if ((s[i] >= 'A' && s[i] <= 'Z') || (s[i] >= '0' && s[i] <= '9')) {
if (is_word_started == 0) {
is_word_started = 1;
}
printf("%c", s[i]);
}
else {
if (is_word_started == 1) {
is_word_started = 0;
printf("\n");
}
}
}
printf("\n");
return 0;
}
এখন প্রোগ্রামটি বুঝতে চেষ্টা করো এবং বিভিন্ন ইনপুট দিয়ে পরীক্ষা করে দেখো। যেমন:
This is test number 9.9
1: char country[11] = {'B', 'a', 'n', 'g', 'l', 'a', 'd', 'e', 's', 'h', '\0'};
2: char country[] = {'B', 'a', 'n', 'g', 'l', 'a', 'd', 'e', 's', 'h', '\0'};
3: char country[] = "Bangladesh";
4: char *country = "Bangladesh";
#include <stdio.h>
int main()
{
char country[] = {'B', 'a', 'n', 'g', 'l', 'a', 'd', 'e', 's', 'h', '\0'};
printf("%s\n", country);
return 0;
}
#include <stdio.h> int main() { char country[] ={'B', 'a', 'n', 'g', 'l', 'a', 'd', 'e', 's', 'h', '\0', 'i', 's', ' ', 'm', 'y', ' ', 'c', 'o', 'u', 'n', 't', 'r', 'y'};
printf("%s\n", country); return 0; }
প্রোগ্রাম: ৯.৩
#include <stdio.h>
int main()
{
char country[] = {'B', 'a', 'n', 'g', 'l', 'a', 'd', 'e', 's', 'h'};
int i, length;
printf("%s\n", country);
length = 10;
for(i = 0; i < length; i++) {
if(country[i] >= 97 && country[i] <= 122) {
country[i] = 'A' + (country[i] - 'a');
}
}
printf("%s\n", country);
return 0;
}
#include <stdio.h>
int string_length(char str[])
{
int i, length = 0;
for(i = 0; str[i] != '\0'; i++)
{
length++;
}
return length;
}
int main()
{
char c[100];
int length;
while(1 == scanf("%s", c))
{
length = string_length(c);
printf("length: %d\n", length);
}
return 0;
}
#include <stdio.h>
int main()
{
char ara[100];
while(NULL != gets(ara)) {
printf("%s\n", ara);
}
return 0;
}
int string_length(char str[])
{
int i;
for(i = 0; str[i] != '\0'; i++);
return i;
}