要求:不管目录如何变化,取出 20190625172036.xml
http://192.168.1.111:40006/xml/20190625172036.xml
http://192.168.1.111:40006/xml/1D/20190625172036.xml
strrchr函数用法 查找字符串最后一次出现的位置
函数名称: strrchr
函数原型:char *strrchr(const char *str, char c);
所属库: string.h
函数功能:查找一个字符c在另一个字符串str中末次出现的位置(也就是从str的右侧开始查找字符c首次出现的位置),并返回这个位置的地址。如果未能找到指定字符,那么函数将返回NULL。使用这个地址返回从最后一个字符c到str末尾的字符串
strrchr instance analysis1:
#include <string.h>
#include <stdio.h>
void get_xml(const char *src_data)
{
char xml_data[256] = {0};
char *ptr = strrchr(src_data, '/');
sprintf(xml_data,"%s",ptr+1);
//printf("len:%d ptr:%s\n", strlen(ptr), ptr+1);
printf("fn_len:%d fn:%s\n", strlen(xml_data), xml_data);
}
int main(void)
{
//char fn[256] = {0};
char fp[512] = "http://192.168.1.111:40006/xml/20190625172036.xml";
get_xml(fp);
#if 0
char *ptr = strrchr(fp, '/');
sprintf(fn,"%s",ptr+1);
printf("len:%d ptr:%s\n", strlen(ptr), ptr+1);
printf("fn_len:%d fn:%s\n", strlen(fn), fn);
#endif
return 0;
}
成功取出
strrchr instance analysis2:
// 实现strrchr(查找该字符串最后一次出现的位置)
#include <stdio.h>
#include <assert.h>
char * my_strrchr( char const *str, char c)
{
int count = 0;
int i;
assert( str != NULL );
while( *str != '\0')
{
str++;
count++;
}
str--;
for( i = 0; i < count; i++ )
{
if( *str == c )
return str;
else
str--;
}
printf("没有找到该字符\n");
return 0;
}
int main()
{
char *str = "dandanwa";
char ch = 's';
printf("%s\n",my_strrchr( str,ch ));
return 0;
}
参考来源:【c语言】实现strrchr(查找该字符串最后一次出现的位置)_zhaoyaqian552的专栏-CSDN博客
strrchr instance analysis3:
#include <string.h>
#include <stdio.h>
int main(void)
{
char string[20];
char *ptr, c = 'r';
strcpy(string, "There are two rings");
ptr = strrchr(string, c);
if (ptr)
printf("The character %c is at position: %s\n", c, ptr);
else
printf("The character was not found\n");
return 0;
}
参考来源:c/c++ strrchr函数用法 查找字符串最后一次出现的位置_sweetfather的博客-CSDN博客
strstr:
该库函数包含在<string.h>头文件中,
char *strstr(char *str1, const char *str2);
使用方法 char *strstr(char *str1, char *str2); 意义为 判断str2是否为str1的字串,若是则返回str2在str1中首次出现的指针位置,若不是返回NULL;
类似的strchr(str,ch)。strchr函数原型:char * strchr(char * str,char ch); 功能就是找出在字符串str中第一次出项字符ch的位置,找到就返回该字符位置的指针(也就是返回该字符在字符串中的地址的位置),找不到就返回空指针(就是 null)。
strstr instance analysis1:
#include<stdio.h>
#include<string.h>
void main()
{
char *str1 = "WHEN YOU HERE PEOPLE SING";
char *str2 = "PEOPLE";
char *pl;
pl=strstr(str1,str2);
printf("Substring is: %s\n",pl);
}
strstr instance analysis2(手动实现):
#include <string.h>
#include <stdio.h>
#include<assert.h>
char* Strstr(char* dest, char* src)
{
char* ptr = dest; //
assert(dest&&src); //断言,如果字符串中有为0的值则中断程序
while (*ptr)
{
char* p1 = ptr;
char* p2 = src;
while ((*p1) && (*p2) && (*p1 == *p2))
{
//p1的值与P2的值都不为0且当p1的值与p2的值相等时
p1++;
p2++;
}
if (*p2 == '\0'){ //如果P2等于0
return (char*)src; //返回子字符串出现的首地址,即子字符串
}
ptr++; //字符串++
}
return NULL;
}
int main()
{
char arr1[] = "Hello World Here"; //字符串1
char arr2[] = "World"; //字符串2
char* ret = Strstr(arr1, arr2); //判断字符串2在字符串1中是否出现并返回该查找字符串出现的首地址
if (ret==NULL){
printf("没有找到子字符串"); //如果没有则返回没有查找到
}else{
printf("找到字符串: %s\n",ret); //打印子字符串
}
return 0;
}
strchr
char *strchr(const char *s,char c);
const char *strchr(const char* _Str,int _Val)
char *strchr(char* _Str,int _Ch)
头文件:#include <string.h>
功能:查找字符串s中首次出现字符c的位置
说明:返回首次出现c的位置的指针,如果s中不存在c则返回NULL。
返回值:Returns the address of the first occurrence of the character in the string if successful, or NULL otherwise
strlwr
原型:extern char *strlwr(char *s);
用法:#include <string.h>
功能:将字符串s转换为小写形式
说明:只转换s中出现的大写字母,不改变其它字符。返回指向s的指针。
注意事项:在Linux的编译器中,有可能会编译不通过。
字符串操作比较简单,不能老是查API接口,要自己手动实现,必须快速解决问题,要将代码写到无码可写
my_strchr
#include <stdio.h>
#if 0
char *strchr(const char *s,char c);
const char *strchr(const char* _Str,int _Val)
char *strchr(char* _Str,int _Ch)
头文件:#include <string.h>
功能:查找字符串s中首次出现字符c的位置
说明:返回首次出现c的位置的指针,如果s中不存在c则返回NULL。
返回值:Returns the address of the first occurrence of the character in the string if successful, or NULL otherwise
#endif
char *my_strchr(const char *src_string, char symbal)
{
if(src_string == NULL) return ;
char *p_str = (char *)malloc(256);
memset(p_str, 0, 256);
int str_len = strlen(src_string);
int i = 0;
int istart = 0;
for(i = 0; i < str_len ; i++)
{
if(src_string[i] == symbal)
{
istart = i+1;
printf("istart:%d str_len:%d\n", istart,str_len);
break;
}
}
#if 1
for(i = 0; i < (str_len - istart); i++)
{
p_str[i] = src_string[istart + i];
}
#endif
//memcpy(p_str, src_string + istart, str_len - istart);
return p_str;
}
int main()
{
char data[256] = {"hello-world-liuqs"};
char *dst_str = my_strchr(data, '-');
printf("dst_str:%s \n", dst_str);
return 0;
}
my_strrchr
只需要改一个参数 //break 放开
if(src_string[i] == symbal)
{
istart = i+1;
printf("注释掉即可istart:%d str_len:%d\n", istart,str_len);
break; //放开
}
#include <stdio.h>
#if 0
char *strchr(const char *s,char c);
const char *strchr(const char* _Str,int _Val)
char *strchr(char* _Str,int _Ch)
头文件:#include <string.h>
功能:查找字符串s中首次出现字符c的位置
说明:返回首次出现c的位置的指针,如果s中不存在c则返回NULL。
返回值:Returns the address of the first occurrence of the character in the string if successful, or NULL otherwise
#endif
char *my_strrchr(const char *src_string, char symbal)
{
if(src_string == NULL) return ;
char *p_str = (char *)malloc(256);
memset(p_str, 0, 256);
int str_len = strlen(src_string);
int i = 0;
int istart = 0;
for(i = 0; i < str_len ; i++)
{
if(src_string[i] == symbal)
{
istart = i+1;
printf("istart:%d str_len:%d\n", istart,str_len);
break;
}
}
#if 1
for(i = 0; i < (str_len - istart); i++)
{
p_str[i] = src_string[istart + i];
}
#endif
//memcpy(p_str, src_string + istart, str_len - istart);
return p_str;
}
int main()
{
char data[256] = {"hello-world-liuqs"};
char *dst_str = my_strrchr(data, '-');
printf("dst_str:%s \n", dst_str);
return 0;
}