字符串:如何取出xml文件

要求:不管目录如何变化,取出 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静思心远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值