C Programming මුල සිට ඉගෙනගනිමු (part 15 - Strings Q&A)



  • සුබ දවසක් වේවා ඔයාලට. මන් කලින් ලිපියේ Strings ගැන සියල්ලම වගෙ කතා කලා. ඒත් ඒවා යොදාගෙන අපිට විසඳන්න පුලුවන් ගැටළු ගැන සාකච්ජා කලේ නෑ. අපි මේ ලිපියෙන් කරන්න යන්නේ Strings වලින් අපෙන් අහන ප්‍රශ්න හා ඒවාට පිලිතුරු ගැනයි. මන් සෑම ගැටළුවක්ම කොටස් වලට කඩ කඩ අහන්නම්.

    Question 1
    1. Write a C program to input string from the keyboard and display it on screen.

    ඉහත ගැටළුවනම් සරල එකක් බව ඔබට පෙනෙනවා ඇති වචනයක් හෝ වචන කිහිපයක් keyboard එක මඟින් input කරලා ඒ input කරපු එක screen එකේ display කරන්න කියලයි මේකෙන් කියන්නේ.

    මෙම ගැටලුව විසඳීමට නම් අපට මේ කරුණු වැදගත් වෙනවා.

    • chr එසේත් නැතිනම් character කිහිපයක් එකතු වෙලා තමා string එකක් හැදෙන්නේ. ඒ නිසා මෙම character කිහිපය එකට එකතු කිරීමට අපිට array එකක් යොදා ගැනීමට සිදු වනවා.

    • string එකක භාවිතා කරන විට අපිට #include <stdio.h> එකට අමතරව #include <string.h> එකත් භාවිතා කිරීමට සිදු වනවා.

    • scanf එකක් භාවිතා කර string එකක් keyboard එක මඟින් input කරන විට එම string එක read කිරීමට %c වෙනුවට %s භාවිතා කිරීමට සිදු වනවා.

    • scanf එකක් භාවිතා කරන විට variable එක ඉස්සරහින් & ලකුණ යෙදීමෙනුත් අපි වලකිනවා.

    අපි දැන් මේ කරුණු සැලකිල්ලට ගනිමින් program එක code කරලා බලමු.

    #include <stdio.h>
    #include <string.h> // string header එක භාවිතා කල යුතු වේ.
    
    int main()
    {
        char words[100]; // ඔබට input කිරීමට අවශ්‍ය වන අකුරු ගණන දල වශයෙන් මෙතන සංඛ්‍යාත්මකව දැක්විය යුතුය.
    
        printf("Enter a string = ");
        scanf("%s", words); // අනික් ඒවා මෙන් නොව මෙහිදී & ලකුණ යෙදිය යුතු නොවේ. තවද %c වෙනුවට %s භාවිතා කරයි.
    
        printf("You have entered = %s", words); //string එකක් input කිරීමට හා output කිරීමට %s යොදා ගනී
    
        return 0;
    }
    

    Output -:

    Enter a string = Kalana
    Your have entered = Kalana
    

    අපි දැන් පලමුවන ගැටලුව කලා. දැන් අපි ඒ ගැටලුවටම තව කොටසක් සම්බන්ධ කරල බලමු ඒක විසඳන විදිහ.

    2. Improve above program to get length of that string and output the value of length.

    ඉහත කොටසින් කියන්නේ අපි කලින් හදපු program එක වැඩිදියුනු කරන්න කියලා. ඒ තමයි අපි input කරපු string එකේ දිග සොයාගැනීමයි. char words[100]; මඟින් අපි දළ දිගක් ලබා දුන්නට අපි දන්නෑ අපි input කරපු string එකේ සැබෑ දිග කීයද කියලා මන් Kalana කියලා ටයිප් කලොත් ඒකේ අකුරු ගනන 6යි. එතකොට ඒකේ සැබෑ දිගත් 6යි 100 නෙමේ. එම නිසා අපි string එකක සැබෑ දිග අරගන්න හදන විට මේ දේවල් අනුගමනය කල යුතු වනවා.

    • string එකක දිග සංඛ්‍යාත්මකව ලබා ගැනීම සඳහා #include <string.h> මඟින් අපට ලබා දී ඇති විශේෂිත අංගය වන්නේ strlen() keyword එකයි.
    #include <stdio.h>
    #include <string.h> 
    
    int main()
    {
        char words[100]; 
        int length = 0; //length එක keyboard එක මඟින් input නොකරන නිසා 0ට සමාන කිරීම.
    
        printf("Enter a string = ");
        scanf("%s", words); 
        
        length = strlen(words); //string එකක දිග සංඛ්‍යාත්මකව ලබා ගැනීම සඳහා strlen() keyword එක භාවිතා කිරීම
    
        printf("\nYou have entered = %s", words); 
        printf("\nYour string length is = %d", length); //string එකේ දිග output කිරීම.
    
        return 0;
    }
    

    Output -:

    Enter a string = kalana
    
    You have entered = kalana
    Your string length is = 6
    

    ඉහත 6 මඟින් පෙන්නුම් කරන්නේ එක එක අකුර array එකක් තුල store වෙලා ඇති කාමර ප්‍රමාණයයි. අපි එය මේ විදිහට පැහැදිලි කරගම්මු. මන් කිව්වා array එකක් සෑම විටම පටන් ගන්නේ 0න් කියලා.

    • අපි input කරපු වචනය තමා kalana කියන්නේ. එය array එක තුල store වන්නේ මේ ආකාරයටයි.
    words[0] = 'k'
    words[1] = 'a'
    words[2] = 'l'
    words[3] = 'a'
    words[4] = 'n'
    words[5] = 'a'
    words[6] සිට words[100] දක්වා අපි කිසිවක් input කර නොමැති හෙයින් ඒවා තිබෙන විදිහටම නිශ්ක්‍රීයව පවතී.
    

    3. improve above program to revers a string that you have entered from keyboard.

    මෙහිදී කියන්නේ අපි ඇතුලත් කරන ඕනෑම string එකක් පැති මාරු කරලා එසේත් නැත්තම් අනිත් පැත්තට ලියන්න කියලා. උදාහරණයක් ගත්තොත් අපි input කලොත් cat කියලා ඒක output වෙන්න ඕනේ tac කියලා.

    කලින් කොටසේ අපි දැනගත්තා string එකක් array එකක් තුල store වෙන ආකාරය. එහිදී kalana කියන නම් array එකේ 0 සිට 5 දක්වා අකුරින් අකුර store උනා. නමුත් අපි එම string එක output කරද්දි ඒ ඉලක්කම් පිලිවෙළට output කලා.

    words[0] = 'k'
    words[1] = 'a'
    words[2] = 'l'
    words[3] = 'a'
    words[4] = 'n'
    words[5] = 'a'
    
    Output = kalana
    

    නමුත් අපි 5 සිට 0 දක්වා පිලිවෙලට array එක සෑදුවොත් මොකද වෙන්නේ

    words[5] = 'a'
    words[4] = 'n'
    words[3] = 'a'
    words[2] = 'l'
    words[1] = 'a'
    words[0] = 'k'
    
    Output = analak
    

    දැන් ඔබට පෙනෙනව ඇති 0 සිට 5ට නොව 5 සිට 0ට array එකේ ඉලක්කම් වෙනස් කලොත් අපිට අපේ string එක අනිත් පැත්ත හරවන්න පුලුවන් කියලා.

    #include <stdio.h>
    #include <string.h> 
    
    int main()
    {
        char words[100]; 
        int length = 0;
    
        printf("Enter a string = ");
        scanf("%s", words); 
        
        length = strlen(words);
    
        printf("\nYou have entered = %s", words); 
        printf("\nYour string length is = %d", length);
        printf("\nReversed string is = ");
    	
    	length = length - 1; // array එකක් පටන් ගන්නේ 0සිට නිසා අකුරු 6 බිංදුවේ සිට පටන් ගත්තොත් ඉවර වන්නේ 5න් වේ.
        
        while(length >= 0) // අපි input කරපු වචනයේ දිග 0ට වඩා විශාල හෝ සමානදැයි බැලීම
        {
            printf("%c", words[length]); // අපි input කරපු වචනයේ අවසන් අකුර output වීම
            length--;             // ඊලග අකුර output කිරීම සඳහා අපි input කරපු වචනයේ දිග එකකින් අඩු කිරීම.
        }
    
        return 0;
    }
    

    Output -:

    Enter a string = kalana
    
    You have entered = kalana
    Your string length is = 6
    Reversed string is = analak
    

    අපි ඉහත code එක පියවර ආකාරයෙන් බලමු.

    • මන් input කල වචනය වන්නේ kalana යන්නයි.

    • එහි දිග 6ක් බව strlen() මඟින් අපි සොයා ගත්තා.

    • length = length - 1; මඟින් අපි 6 කියන ඉලක්කම 5 දක්වා අඩු කලා.

    • while loop එකේ පලමු වටය

    //  length = length - 1; නිසා දැන් length වල නවතම අගය 5 වේ.
    
    while(length >= 0) // 5 >= 0 බව සත්‍ය නිසා  while loop එක run වේ.
    {
        printf("%c", words[length]); //  length = 5 නිසා words[5] හි අගය output වේ. words[5] හි අගය වන්නේ  `a` අකුරයි.
        length--;       // 4වන අකුර output කිරීම සඳහා අපි 5 කියන අගය එකකින් අඩු කිරීම සිදු කරයි. 
    }
    
    Output -: a
    
    • while loop එකේ දෙවන වටය
    // length--; නිසා දැන් length වල නවතම අගය 4 වේ.
    
    while(length >= 0) // 4 >= 0 බව සත්‍ය නිසා  while loop එක run වේ.
    {
        printf("%c", words[length]); // length = 4 නිසා words[4] හි අගය output වේ. words[5] හි අගය වන්නේ  `n` අකුරයි.
        length--;       // 3වන අකුර output කිරීම සඳහා අපි 4 කියන අගය එකකින් අඩු කිරීම සිදු කරයි. 
    }
    
    Output -: an
    
    • මෙලෙස length 0වීම දක්වා while loop එක run වී අපගේ වචනය අනිත් පැත්ත හරවා අපිට ලබා දේ.

    පලමු ප්‍රශ්නය මෙතනින් අවසන්. දැන් අපි තව ප්‍රශ්නයක් බලමු.


    Question 2

    1. Write a C program to input string from keyboard and convert lower case into uppercase.

    Hint : ‘a’ – 97, ‘z’ - 122
           ‘A’ – 65, ‘Z’ - 90
    

    මෙම ප්‍රශ්නයෙන් කියන්නේ අපි ඕනෑම වාක්‍යක් input කල විට එහි ඇති සියලුම simple letters අපිට හරවන්න කියනවා capital letters බවට. අපිට ඉඟියකුත් මෙහිදී දීලා තියෙනවා ASCII code වල ඉංග්‍රීසි අකුරු වල සංඛ්‍යාත්මක නිරූපණය. අපිට ලබා දීලා තියෙනවා.

    • මෙහි දී ඇති ආකාරයට අපි ඇතුලත් කරන වාක්‍යයක simple letters හඳුනාගත යුතු වනවා. ඒ සඳහා ඔබට පෙනෙනවා ඇති අපිට අකුරින් අකුර පරීක්ෂා කිරීමට සිදු වන බව. වාක්‍යයක් අකුරින් අකුර පරීක්ෂා කිරීමට නම් පලමුව එම වාක්‍යයේ දිග හදුනාගත යුතුයි. ඉන්පසුව එය අකුරින් අකුර පරීක්ෂා කර බැලිය යුතුයි. එම කාර්යයන් සදහා අපට strlen() උපයෝගී කරගත හැකිය.
    # include <stdio.h>
    # include <string.h>
    
    int main (void)
    {
    	char word[100];
    	int i = 0;
    
    	printf("Enter a string = ");
    	scanf("%s", word); // string එකක් input කිරීම
    
    	while((strlen(word) - 1) >= i) // strlen(word) මගින් string එකේ දිග සංඛ්‍යාත්මකව ගෙන එය 0ට වඩා විශාලදැයි බැලීම. මෙහි i වල අගය 0ට සමාන වේ.
    	{
    	    printf("%c", word[i]); // 0 සිට string එකේ සංඛ්‍යාත්මක දිගේ අවසානය දක්වා ගොස් අකුරින් අකුර output කිරීම.
    		i++; //i වල අගය එකකින් වැඩි කිරීම.
    	}
    	
    	return 0;
    }
    

    Output -:

    Enter a string = kalana
    kalana
    
    • strlen(word) - 1 භාවිතා කලේ array එකක් සෑම විටම පටන්ගන්නේ 0නි. එමනිසා 0 සිට පටන් ගත්තොත් අවසාන අගයෙන් එකක් අඩු වේ.

    • අපි දැන් මීලඟට බලමු simple හා capital අකුරු වල සංක්‍යාත්මක අගයයන් එනම් ASCII අගයයන්

    # include <stdio.h>
    # include <string.h>
    
    int main (void)
    {
    	char word[100];
    	int i = 0;
    
    	printf("Enter a string = ");
    	scanf("%s", word);
    
    	while(strlen(word) >= i)
    	{
    	    printf("%c  ", word[i]);
    		printf("%d\n", word[i]); //අපි ඇතුලත් කරන ඉංග්‍රීසි අකුරේ ASCII අගය output කරයි.
    		i++;
    	}
    	
    	return 0;
    }
    

    Output -:

    Enter a string = AaZz
    A  65
    a  97
    Z  90
    z  122
    
    • පහත වගුව බලා ASCII රටාව තේරුම් ගනිමු.
    a = 97       y = 121
    A = 65       Y =  89
    වෙනස 32   වෙනස 32
    
    b = 98       z = 122
    B = 66       Z =  90
    වෙනස 32   වෙනස 32
    
    • simple වල ASCII අගය පරාසය 97 හා 122 අතර වේ.

    • capital වල ASCII අගය පරාසය 65 හා 90 අතර වේ.

    • ඔබට පෙනෙනවා ඇති සෑම simple අකුරකම ASCII අගය සෑම capital අකුරකම ASCII අගයට වඩා 32කින් වැඩි බව.

    • අපි ඇතුලත් කරන වාක්‍යය අකුරු වලට කඩා එම අකුරු simple වල ASCII අගය පරාසය වන 97 හා 122 අතරදැයි බලා එය සත්‍ය නම් එම අගයයන් වලින් 32ක ගානේ අඩු කලොත් අපට අපේ අකුරු capital වලට හැරවීමට හැකි බව ඔබට තේරෙනවා ඇති.

    # include <stdio.h>
    # include <string.h>
    
    int main (void)
    {
    	char word[100];
    	int i = 0;
    
    	printf("Enter a string = ");
    	scanf("%s", word);
    
    	while(strlen(word) >= i)
    	{
    		if(word[i] >= 97 && word[i] <= 122) // අපි input කල වචනයේ අකුරින් අකුර simple letter එකක්දැයි පරීක්ෂා කර බැලීම. එනම් ASCII අගය පරාසය වන 97 හා 122 අතරදැයි පරීක්ෂා කිරීම
    		{
    			word[i] = word[i] - 32; // අගය පරාසය වන 97 හා 122 අතර අතරනම් එම අකුර capital බවට හැරවීමට 32ක් අඩු කිරීම. එවිට එම simple අකුරු capital අකුරු බවට හැරවේ.
    		}
    		i++;
    	}
    
    	printf("After converting it to uppercase = %s", word);
    	
    	return 0;
    }
    

    Output -:

    Enter a string = kalana
    After converting it to uppercase = KALANA
    
    • if(word[i] >= 97 && word[i] <= 122) වෙනුවට if(word[i] >= 65 && word[i] <= 90) යෙදීමෙන් capital letters හරවන්න පුලුවන් simple letters බවට

    මන් ඔයාලට තව ප්‍රශ්නයක් දෙන්නම් උත්තරත් එක්ක. තනියම ට්‍රයි කරලා බලන්න උත්තර බලන් නැතුව.

    Question 3 -: A palindrome is a word, phrase, number or other sequence of characters which reads the same backward and forward. Write a C program that enter a word, store it in a array and determine whether it is palindrome or not.

    Example : CIVIC is a palindrome
              HOT is a not a palindrome
    

    palindrome කියන්නේ වචනයක් අනිත් පැත්ත හැරෙව්වත් තිබුණ විදිහටම තියෙන වචන CIVIC කියන එකේ අකුරු අනිත් පැත්ත හැරෙව්වත් ඒක ආයේ කියැවෙන්නෙත් CIVIC විදිහටමයි. ඒත් HOT කියන එක අනිත් පැත්ත හැරෙව්වොත් කියැවෙන්නේ TOH ලෙසයි. එමනිසා HOT කියන එක palindrome එකක් නොවේ.

    Answer -: https://drive.google.com/open?id=1_zT4tXtYW6jQL5PySmXImp3_7ngAYbxw

    Another Answer -: https://drive.google.com/open?id=1xhp3bUjwmH-jPQ0FQyAUOln8BJp9sFzI


    ඔබට අවශ්‍යනම් ඔබේ බ්‍රව්සර් එක හරහා online C programms run කරන්න පුලුවන්. එහෙම කරන්න පුලුවන් ලින්ක්ස් මන් පහතින් දාන්නම්

    සරලව මුල ඉදන් C programming ඉගෙන ගන්න පුලුවන් හොදම site කිහිපයක් මන් දාන්නම්

    web url කෙටි කරන්න lankadevelopers ලා හදපු එයාලගෙම සයිට් එකක් තියෙනවා. -> https://link.lankadevelopers.com/

    මගේ කලින් ලිපි

    මේ ලිපියෙන් Strings වල එන මූලික කරුණු සියල්ලක්ම පාහේ අපි සාකච්ජා කලා. මන් ඊලග ලිපියෙන් C functions ගැන හා ඒවා භාවිතා කරන විදිහ ඔයාලට කියලා දෙන්නම්. මගේ ලිපි වල අඩුපාඩු තියෙනවනම් දන්නේ නැති දේවල් තියෙනවනම් පහලින් කමෙන්ට් එකක් දාන්න.

    තව ලිපියකින් හම්බෙමු ජය වේවා.


Log in to reply