Bird
Raised Fist0
Cprogramming~10 mins

String comparison - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - String comparison
Start
↓
Read two strings
↓
Compare characters one by one
↓
Characters equal?
No→Return difference
Yes↓
End of strings?
No→Move to next char
Yes↓
Strings equal
→Return 0
↓
End
The program compares two strings character by character until a difference is found or both strings end.
Execution Sample
C
int result = strcmp("cat", "car");
if (result == 0) {
  printf("Equal\n");
} else {
  printf("Not equal\n");
}
This code compares two strings "cat" and "car" and prints if they are equal or not.
Execution Table
StepIndexChar in str1Char in str2ComparisonResultAction
10'c''c''c' == 'c'0Continue to next character
21'a''a''a' == 'a'0Continue to next character
32't''r''t' != 'r''t' - 'r' = 2Return 2 (strings differ)
💡 At index 2, characters differ ('t' vs 'r'), so strcmp returns positive value 2.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
index01222
char_str1'c''a''t''t''t'
char_str2'c''a''r''r''r'
resultundefined0022
Key Moments - 2 Insights
Why does strcmp return a positive number instead of just 1 or -1?
strcmp returns the difference between the first differing characters' ASCII codes, not just 1 or -1, as shown in step 3 of the execution_table where 't' - 'r' equals 2.
What happens if both strings are exactly the same?
If all characters match and both strings end at the same time, strcmp returns 0, indicating equality, as explained in the concept_flow and would be shown if no difference was found.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of 'result' after step 2?
A1
B0
C2
D-1
💡 Hint
Check the 'result' column in execution_table row for step 2.
At which index do the two strings first differ according to the execution_table?
A2
B1
C0
D3
💡 Hint
Look at the 'Index' column where 'Comparison' shows characters are not equal.
If the first differing characters were 'r' in str1 and 't' in str2, what would strcmp return?
A0
B2
C-2
D1
💡 Hint
strcmp returns the difference: char_str1 - char_str2, so 'r' - 't' is negative.
Concept Snapshot
strcmp(str1, str2) compares two strings character by character.
Returns 0 if equal.
Returns positive if first differing char in str1 > str2.
Returns negative if first differing char in str1 < str2.
Stops at first difference or end of strings.
Full Transcript
This visual execution shows how the C function strcmp compares two strings. It checks each character from the start, comparing them one by one. If characters are equal, it moves to the next. When it finds a difference, it returns the difference of their ASCII codes. If no difference is found and both strings end, it returns zero meaning the strings are equal. The example compares "cat" and "car". At index 2, 't' and 'r' differ, so strcmp returns 2, a positive number. This means "cat" is greater than "car" in lexicographical order.

Practice

(1/5)
1. Which function is used in C to compare the contents of two strings?
easy
A. strcpy
B. strlen
C. strcmp
D. strcat

Solution

  1. Step 1: Identify string comparison functions

    Among the options, only strcmp is designed to compare two strings character by character.
  2. Step 2: Understand other functions

    strcpy copies strings, strlen measures length, strcat concatenates strings; none compare contents.
  3. Final Answer:

    strcmp -> Option C
  4. Quick Check:

    strcmp compares strings [OK]
Hint: Use strcmp to compare strings, not == operator [OK]
Common Mistakes:
  • Using == to compare strings
  • Confusing strcpy with strcmp
  • Assuming strlen compares strings
2. Which header file must be included to use the strcmp function in C?
easy
A.
B.
C.
D.

Solution

  1. Step 1: Recall standard headers for string functions

    String functions like strcmp are declared in the <string.h> header file.
  2. Step 2: Verify other headers

    <stdio.h> is for input/output, <stdlib.h> for general utilities, <ctype.h> for character handling, none provide strcmp.
  3. Final Answer:

    <string.h> -> Option D
  4. Quick Check:

    strcmp needs <string.h> [OK]
Hint: Include for strcmp and other string functions [OK]
Common Mistakes:
  • Forgetting to include
  • Including only
  • Using wrong header like
3. What is the output of the following C code?
#include <stdio.h>
#include <string.h>

int main() {
    char a[] = "apple";
    char b[] = "apricot";
    int result = strcmp(a, b);
    if (result < 0) {
        printf("a is less than b\n");
    } else if (result > 0) {
        printf("a is greater than b\n");
    } else {
        printf("a and b are equal\n");
    }
    return 0;
}
medium
A. a is less than b
B. a is greater than b
C. a and b are equal
D. Compilation error

Solution

  1. Step 1: Understand strcmp result for "apple" and "apricot"

    strcmp compares strings lexicographically; "apple" is less than "apricot" because 'l' (in apple) comes before 'r' (in apricot).
  2. Step 2: Check the if conditions

    Since result is negative, the program prints "a is less than b".
  3. Final Answer:

    a is less than b -> Option A
  4. Quick Check:

    strcmp("apple", "apricot") < 0 [OK]
Hint: strcmp returns negative if first string is lexically smaller [OK]
Common Mistakes:
  • Assuming strcmp returns boolean
  • Confusing lex order of 'l' and 'r'
  • Expecting equality for different strings
4. Identify the error in this code snippet comparing two strings:
#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "hello";
    char str2[] = "hello";
    if (str1 == str2) {
        printf("Strings are equal\n");
    } else {
        printf("Strings are not equal\n");
    }
    return 0;
}
medium
A. Using '==' to compare strings instead of strcmp
B. Missing #include header
C. Incorrect printf format specifier
D. Strings are not initialized properly

Solution

  1. Step 1: Understand string comparison in C

    Using '==' compares addresses, not string contents, so it does not check if strings are equal.
  2. Step 2: Correct method to compare strings

    Use strcmp(str1, str2) == 0 to check if strings have the same content.
  3. Final Answer:

    Using '==' to compare strings instead of strcmp -> Option A
  4. Quick Check:

    Use strcmp for string content comparison [OK]
Hint: Never use '==' for strings; use strcmp instead [OK]
Common Mistakes:
  • Using '==' operator for string comparison
  • Ignoring string content vs pointer comparison
  • Not including when using strcmp
5. You want to check if two strings str1 and str2 are equal ignoring case differences in C. Which approach correctly achieves this?
hard
A. Use strcmp(str1, str2) == 0
B. Use strcasecmp(str1, str2) == 0
C. Use strcmp(tolower(str1), tolower(str2)) == 0
D. Use strcmp(str1, str2) != 0

Solution

  1. Step 1: Understand case-insensitive comparison

    strcmp compares case-sensitively, so it fails if cases differ. strcasecmp compares ignoring case.
  2. Step 2: Evaluate other options

    Use strcmp(str1, str2) == 0 is case-sensitive; Use strcmp(tolower(str1), tolower(str2)) == 0 is invalid because tolower expects a char, not a string; Use strcmp(str1, str2) != 0 checks inequality, not equality.
  3. Final Answer:

    Use strcasecmp(str1, str2) == 0 -> Option B
  4. Quick Check:

    strcasecmp compares strings ignoring case [OK]
Hint: Use strcasecmp for case-insensitive string comparison [OK]
Common Mistakes:
  • Using strcmp for case-insensitive check
  • Applying tolower to whole strings incorrectly
  • Confusing equality and inequality checks
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard