ความหมาย
strcmp() เปรียบเทียบ string สองตัวทุกตัวอักษรจนกว่าจะเจอความต่างหรือจบ string คืนค่าเป็น integer
Prototype
int strcmp(const char *str1, const char *str2);
คืนค่า
- 0 - string ทั้งสองเหมือนกันทุกตัวอักษร
- > 0 - str1 มากกว่า str2 (ASCII ของตัวที่ต่างกันแรก)
- < 0 - str1 น้อยกว่า str2
หลักการเปรียบเทียบ
เปรียบเทียบทีละตัวอักษรจากซ้ายไปขวา หาตัวที่ต่างกันแรก แล้วลบค่า ASCII (str1[i] - str2[i])
ตัวอย่างโปรแกรมที่ 1: เปรียบเทียบ String แบบง่าย
#include <stdio.h>
#include <string.h>
int main() {
char a[50], b[50];
int d;
printf("ป้อน string 2 ตัว: ");
scanf("%s %s", a, b);
d = strcmp(a, b);
if (d == 0)
printf("'%s' เท่ากับ '%s'\\n", a, b);
else if (d > 0)
printf("'%s' มากกว่า '%s'\\n", a, b);
else
printf("'%s' น้อยกว่า '%s'\\n", a, b);
return 0;
}ผลลัพธ์
ป้อน string 2 ตัว: bhanu priya 'bhanu' น้อยกว่า 'priya'
คำอธิบาย: 'b' (98) < 'p' (112) ใน ASCII จึงคืนค่าติดลบ
ตัวอย่างโปรแกรมที่ 2: รับ input ด้วย fgets
#include <stdio.h>
#include <string.h>
int main() {
char string1[25], string2[25];
int value;
printf("ป้อน String 1: ");
fgets(string1, sizeof(string1), stdin);
string1[strcspn(string1, "\\n")] = '\\0';
printf("ป้อน String 2: ");
fgets(string2, sizeof(string2), stdin);
string2[strcspn(string2, "\\n")] = '\\0';
value = strcmp(string1, string2);
if (value == 0)
printf("'%s' เหมือน '%s'\\n", string1, string2);
else if (value > 0)
printf("'%s' มากกว่า '%s'\\n", string1, string2);
else
printf("'%s' น้อยกว่า '%s'\\n", string1, string2);
return 0;
}ผลลัพธ์ตัวอย่าง
ป้อน String 1: Tutorials ป้อน String 2: Point 'Tutorials' มากกว่า 'Point'
คำอธิบาย: 'T' (84) > 'P' (80) ใน ASCII
ตารางเปรียบเทียบฟังก์ชัน String
| ฟังก์ชัน | วัตถุประสงค์ | คืนค่า |
|---|---|---|
| strcmp | เปรียบเทียบ string ทั้งหมด | int (0, +, -) |
| strncmp | เปรียบเทียบ n ตัวแรก | int (0, +, -) |
| strcasecmp | เปรียบเทียบไม่สนใจ case (POSIX) | int (0, +, -) |
| strcoll | เปรียบเทียบตาม locale | int (0, +, -) |
หมายเหตุ
- ต้อง include
<string.h> - ไม่ควรใช้
gets()ใช้fgets()แทน - strcmp เหมาะสำหรับ sorting string