=Start=
缘由:
学习、提高需要
正文:
参考解答:
#include <stdio.h>#include <string.h>#include <stdbool.h> /* use bool in C */#include <ctype.h> /* tolower() *//*The strcmp() and strncmp() functions return an integer less than, equal to, or greater than zero if s1 (or the first n bytes thereof) is found, respectively, to be less than, to match, or be greater than s2.返回值 > 0 表示: s1 > s2返回值 = 0 表示: s1 = s2返回值 < 0 表示: s1 < s2int strcmp(const char *s1, const char *s2);int strncmp(const char *s1, const char *s2, size_t n);*//*返回值 = 1 表示: str 以 prefix 为前缀返回值 = 0 表示: str 不以 prefix 为前缀*/bool starts_with(const char *str, const char *prefix){ if (!str || !prefix) return 0; if(strncmp(str, prefix, strlen(prefix)) == 0) return 1; return 0;}/*返回值 = 1 表示: str 以 suffix 为后缀返回值 = 0 表示: str 不以 suffix 为后缀*/bool ends_with(const char *str, const char *suffix){ if (!str || !suffix) return 0; size_t lenstr = strlen(str); size_t lensuffix = strlen(suffix); if (lensuffix > lenstr) return 0; return strncmp(str + lenstr - lensuffix, suffix, lensuffix) == 0;}int ends_withFoo(const char *str) { return ends_with(str, ".foo"); }/*返回值 > 0 表示: s1 > s2返回值 = 0 表示: s1 = s2返回值 < 0 表示: s1 < s2*/int strcicmp(char const *s1, char const *s2){ if (!s1 || !s2) return 0; for (;; s1++, s2++) { int d = tolower(*s1) - tolower(*s2); if (d != 0 || !*s1) return d; }}int main(int argc, char const *argv[]){ if (argc < 4) { printf("Usage:\n\t%s string prefix suffix\n\n", argv[0]); return 0; } if (starts_with(argv[1], argv[2])) { printf("'%s' starts_with '%s'\n", argv[1], argv[2]); } else { printf("'%s' not starts_with '%s'\n", argv[1], argv[2]); } if (ends_with(argv[1], argv[3])) { printf("'%s' ends_with '%s'\n", argv[1], argv[3]); } else { printf("'%s' not ends_with '%s'\n", argv[1], argv[3]); } return 0;} |
参考链接:
Linux下C语言字符串比较
http://man7.org/linux/man-pages/man3/strncmp.3.html
http://man7.org/linux/man-pages/man3/strncasecmp.3.html
https://stackoverflow.com/questions/8004237/how-do-i-properly-compare-strings
大小写不敏感的比较
https://stackoverflow.com/questions/5820810/case-insensitive-string-comp-in-c
EndsWith 结尾比较
https://stackoverflow.com/questions/744766/how-to-compare-ends-of-strings-in-c
StartsWith 开头比较
https://stackoverflow.com/questions/15515088/how-to-check-if-string-starts-with-certain-string-in-c
https://stackoverflow.com/questions/4770985/how-to-check-if-a-string-starts-with-another-string-in-c
=END=