Basic String Programming Questions

Here are 10 C programming exercises that involve strings:

  1. String Length: Write a program to calculate and print the length of a given string without using the strlen function.

  2. String Reversal: Create a program that reverses a given string. For example, if the input is "hello," the output should be "olleh."

  3. String Concatenation: Implement a function to concatenate two strings without using the standard library function strcat.

  4. String Comparison: Write a program that compares two strings without using the strcmp function and prints whether they are equal or not.

  5. Substring Search: Develop a function to check if a given substring exists in a larger string. Return the position of the first occurrence if found, otherwise return -1.

  6. Palindrome Check: Create a program to determine if a given string is a palindrome (reads the same backward as forward).

  7. Count Vowels and Consonants: Write a function to count the number of vowels and consonants in a given string.

  8. String Tokenization: Implement a program that tokenizes a given sentence into words. Print each word on a new line.

  9. String Compression: Develop a function to compress a string by replacing repeated characters with a single occurrence followed by the count. For example, "aaabbbcc" should become "a3b3c2."

  10. Remove Duplicates: Write a program to remove duplicate characters from a string without using any additional data structures. The resulting string should maintain the order of characters.

These exercises cover a range of string-related concepts and will help you practice and strengthen your skills in C programming. I have solved all of the above with explanatory comments. You should first make a sincere attempt at solving these problems before looking at the solutions.

  1. String Length:

     #include <stdio.h>
    
     // Function to calculate the length of a string
     int stringLength(const char *str) {
         int length = 0;
    
         // Iterate through the characters until the null terminator is encountered
         while (str[length] != '\0') {
             length++;
         }
    
         return length;
     }
    
     int main() {
         const char *inputString = "Hello, World!";
         int length = stringLength(inputString);
    
         printf("Length of the string: %d\n", length);
    
         return 0;
     }
    
  2. String Reversal:

     #include <stdio.h>
    
     // Function to reverse a string
     void reverseString(char *str) {
         int length = stringLength(str);
         int i, j;
    
         // Swap characters from the beginning and end of the string
         for (i = 0, j = length - 1; i < j; i++, j--) {
             char temp = str[i];
             str[i] = str[j];
             str[j] = temp;
         }
     }
    
     int main() {
         char inputString[] = "Hello";
    
         // Print the original string
         printf("Original String: %s\n", inputString);
    
         // Reverse the string and print the result
         reverseString(inputString);
         printf("Reversed String: %s\n", inputString);
    
         return 0;
     }
    
  3. String Concatenation:

     #include <stdio.h>
    
     // Function to concatenate two strings
     void concatenateStrings(char *destination, const char *source) {
         int destLength = stringLength(destination);
         int i, j;
    
         // Move to the end of the destination string
         for (i = 0; source[i] != '\0'; i++) {
             destination[destLength + i] = source[i];
         }
    
         // Add null terminator to the end of the concatenated string
         destination[destLength + i] = '\0';
     }
    
     int main() {
         char str1[50] = "Hello, ";
         const char str2[] = "World!";
    
         // Concatenate str2 to str1 and print the result
         concatenateStrings(str1, str2);
         printf("Concatenated String: %s\n", str1);
    
         return 0;
     }
    
  4. String Comparison:

     #include <stdio.h>
    
     // Function to compare two strings
     int compareStrings(const char *str1, const char *str2) {
         int i = 0;
    
         // Compare each character until a mismatch is found or both strings end
         while (str1[i] == str2[i] && str1[i] != '\0') {
             i++;
         }
    
         // Return the difference between the mismatched characters
         return str1[i] - str2[i];
     }
    
     int main() {
         const char str1[] = "Hello";
         const char str2[] = "World";
    
         // Compare str1 and str2 and print the result
         int result = compareStrings(str1, str2);
         printf("Comparison Result: %d\n", result);
    
         return 0;
     }
    
  5. Substring Search:

     #include <stdio.h>
    
     // Function to search for a substring in a string
     int searchSubstring(const char *str, const char *substring) {
         int i, j;
    
         // Iterate through the string
         for (i = 0; str[i] != '\0'; i++) {
             // Check for substring match starting from the current position
             for (j = 0; substring[j] != '\0' && str[i + j] == substring[j]; j++);
    
             // If the entire substring is found, return the starting position
             if (substring[j] == '\0') {
                 return i;
             }
         }
    
         // Return -1 if substring is not found
         return -1;
     }
    
     int main() {
         const char str[] = "Hello, World!";
         const char substring[] = "World";
    
         // Search for the substring and print the result
         int position = searchSubstring(str, substring);
         if (position != -1) {
             printf("Substring found at position: %d\n", position);
         } else {
             printf("Substring not found.\n");
         }
    
         return 0;
     }
    
  6. Palindrome Check:

     #include <stdio.h>
     #include <stdbool.h>
    
     // Function to check if a string is a palindrome
     bool isPalindrome(const char *str) {
         int length = stringLength(str);
         int i, j;
    
         // Compare characters from the beginning and end of the string
         for (i = 0, j = length - 1; i < j; i++, j--) {
             if (str[i] != str[j]) {
                 return false;
             }
         }
    
         // If the loop completes without returning, the string is a palindrome
         return true;
     }
    
     int main() {
         const char str[] = "radar";
    
         // Check if the string is a palindrome and print the result
         if (isPalindrome(str)) {
             printf("%s is a palindrome.\n", str);
         } else {
             printf("%s is not a palindrome.\n", str);
         }
    
         return 0;
     }
    
  7. Count Vowels and Consonants:

     #include <stdio.h>
    
     // Function to count vowels and consonants in a string
     void countVowelsConsonants(const char *str, int *vowels, int *consonants) {
         *vowels = 0;
         *consonants = 0;
    
         // Iterate through the string and classify each character
         for (int i = 0; str[i] != '\0'; i++) {
             char ch = str[i];
    
             // Check if the character is a vowel
             if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' ||
                 ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U') {
                 (*vowels)++;
             } else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
                 // Check if the character is a consonant
                 (*consonants)++;
             }
         }
     }
    
     int main() {
         const char str[] = "Hello, World!";
         int numVowels, numConsonants;
    
         // Count vowels and consonants and print the result
         countVowelsConsonants(str, &numVowels, &numConsonants);
         printf("Vowels: %
    

d\nConsonants: %d\n", numVowels, numConsonants);

return 0; }


8. **String Tokenization:**
```c
#include <stdio.h>
#include <string.h>

// Function to tokenize a string
void tokenizeString(const char *sentence) {
    char copy[100];
    strcpy(copy, sentence);

    // Tokenize the string using strtok
    char *token = strtok(copy, " ");

    // Iterate through tokens and print each one
    while (token != NULL) {
        printf("%s\n", token);
        token = strtok(NULL, " ");
    }
}

int main() {
    const char sentence[] = "This is a sample sentence.";

    // Tokenize the sentence and print each word
    tokenizeString(sentence);

    return 0;
}
  1. String Compression:

     #include <stdio.h>
    
     // Function to compress a string
     void compressString(char *str) {
         int length = stringLength(str);
         int compressedIndex = 0;
    
         // Iterate through the string to compress
         for (int i = 0; i < length; i++) {
             char currentChar = str[i];
             int count = 1;
    
             // Count consecutive occurrences of the current character
             while (i + 1 < length && str[i + 1] == currentChar) {
                 i++;
                 count++;
             }
    
             // Append the compressed character and count to the result string
             str[compressedIndex++] = currentChar;
             if (count > 1) {
                 // Only append the count if it is greater than 1
                 str[compressedIndex++] = count + '0';
             }
         }
    
         // Add null terminator to the end of the compressed string
         str[compressedIndex] = '\0';
     }
    
     int main() {
         char str[] = "aaabbbcc";
    
         // Compress the string and print the result
         compressString(str);
         printf("Compressed String: %s\n", str);
    
         return 0;
     }
    
  2. Remove Duplicates:

     #include <stdio.h>
    
     // Function to remove duplicate characters from a string
     void removeDuplicates(char *str) {
         int hash[256] = {0}; // Assuming ASCII characters
    
         int i, j = 0;
    
         // Iterate through the string
         for (i = 0; str[i] != '\0'; i++) {
             // Check if the character has been encountered before
             if (hash[str[i]] == 0) {
                 // If not, mark it as encountered and copy it to the result string
                 hash[str[i]] = 1;
                 str[j++] = str[i];
             }
         }
    
         // Add null terminator to the end of the modified string
         str[j] = '\0';
     }
    
     int main() {
         char str[] = "programming";
    
         // Remove duplicates from the string and print the result
         removeDuplicates(str);
         printf("String after removing duplicates: %s\n", str);
    
         return 0;
     }