如何检查一个字符串是否以C中的另一个字符串结尾
How to check if a string ends with another string in C
我从 argv[]
中获取图像名称,我需要检查格式是 ".jpg"
还是 ".jpeg"
或 ".ppm"
,但是因为没有 substring()
在 string.h
中,我被迫这样做:
if (imIn[strlen(imgIn) - 4] == '.'
&& imgIn[strlen(imgIn) - 3] == 'j'
&& imgIn[strlen(imgIn) - 2] == 'p'
&& imgIn[strlen(imgIn) - 1] == 'g') {..}
但这需要太多时间 space 我想知道我是否可以做这样的事情
if (strstr(substring(imgIn, strlen(imgIn) - 4, 4), ".jpg") == NULL) {...}.
我不只使用 strstr()
的问题是它会批准 "jpg.png"
之类的东西,因为它会检查整个字符串是否出现。
既然strcmp
取了一个const char *
的地址,那我们就可以把strlen(imgIn) - 3
位置的字符的地址传进去
const char *img = "some_picture.jpg";
const char *extension = img + strlen(img) - 3;
if(!strcmp(extension, "jpg"))
printf("%s", "JPG extension");
但是,有一个问题。如果扩展名是 jpeg
,那么 extension
将包含 peg
。在这种情况下,一个解决方案是向后遍历字符串,直到我们找到第一个 .
字符。
const char *get_extension(const char *img, size_t sz) {
const char *ptr;
ptr = img;
img += sz;
for(; img != ptr; --img) {
if(*img == '.')
return(img + 1);
}
return(NULL);
}
const char *img = "some_picture.jpeg";
const char *extension = get_extension(img, strlen(img));
if(extension != NULL)
/* handle valid input */
else
/* handle invalid input */
我从 argv[]
中获取图像名称,我需要检查格式是 ".jpg"
还是 ".jpeg"
或 ".ppm"
,但是因为没有 substring()
在 string.h
中,我被迫这样做:
if (imIn[strlen(imgIn) - 4] == '.'
&& imgIn[strlen(imgIn) - 3] == 'j'
&& imgIn[strlen(imgIn) - 2] == 'p'
&& imgIn[strlen(imgIn) - 1] == 'g') {..}
但这需要太多时间 space 我想知道我是否可以做这样的事情
if (strstr(substring(imgIn, strlen(imgIn) - 4, 4), ".jpg") == NULL) {...}.
我不只使用 strstr()
的问题是它会批准 "jpg.png"
之类的东西,因为它会检查整个字符串是否出现。
既然strcmp
取了一个const char *
的地址,那我们就可以把strlen(imgIn) - 3
const char *img = "some_picture.jpg";
const char *extension = img + strlen(img) - 3;
if(!strcmp(extension, "jpg"))
printf("%s", "JPG extension");
但是,有一个问题。如果扩展名是 jpeg
,那么 extension
将包含 peg
。在这种情况下,一个解决方案是向后遍历字符串,直到我们找到第一个 .
字符。
const char *get_extension(const char *img, size_t sz) {
const char *ptr;
ptr = img;
img += sz;
for(; img != ptr; --img) {
if(*img == '.')
return(img + 1);
}
return(NULL);
}
const char *img = "some_picture.jpeg";
const char *extension = get_extension(img, strlen(img));
if(extension != NULL)
/* handle valid input */
else
/* handle invalid input */