用于删除 xx:xx:xx:xx:xx:xx 的 C 字符串操作

我正在努力

xx:xx:xx:xx:xx:xx从一个主字符串中删除子字符串时遇到问题以下是问题的背景信息:

在函数 void 中funA()

void funA(const char* sth){
 if (sth == THINGA){
      // do A;
    }
 else if (sth == THINGB){
      // do B;
    }
eles{
      // do C;
    }
 log_status("current status: - %s", sth);
}

sth 是一个字符串,其中包含一个子字符串,xx:xx:xx:xx:xx:xx其中 x 是数字或字母。子字符串前面有一个空格,但字符串末尾可能没有空格。我需要用*. 由于只有子字符串有:,我做了一个辅助函数来定位第一个:和最后一个:并删除它之前的 2 个字符。删除最后 2 个字符并附加一个*. 我认为这种方式是最好的解决方案。所以我想知道是否有更有效的辅助函数设计,也就是辅助函数具有更短的运行时间和更少的内存。由于子串 xx:xx:xx:xx:xx:xx 的格式非常有区别,我能想到的唯一更简单的方法是进行字符串匹配以找到子字符串,然后将其替换为*. 不过,我对其他更具创新性的方式持开放态度。

寻根者
#ifndef PARSER_STACK_H_INCLUDED
#define PARSER_STACK_H_INCLUDED


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define PATTERN_LEN 18


typedef struct{
    unsigned int start;
    unsigned int finish;
}index;

void remove_str_pattern(char *original, char *extract, unsigned int start, unsigned int finish);
void splitter(char *x, index *index_SF);
unsigned int count_points(const char *x);
void obscure(char *str, index index_SF);
char* return_obscure_string(char *str);
char* return_pattern(char *str);

char* return_pattern(char *str){
    index index_SF = {0,0};

    char *str_export = calloc(PATTERN_LEN, sizeof(char));
    char *tmp = calloc(sizeof(str)/sizeof(char), sizeof(char));

    strcpy(tmp, str);

    splitter(str, &index_SF);

    obscure(tmp, index_SF);
    remove_str_pattern(str, str_export, index_SF.start, index_SF.finish);

    return str_export;
}

char* return_obscure_string(char *str){
    index index_SF = {0,0};

    char *str_export = calloc(PATTERN_LEN, sizeof(char));
    char *tmp = calloc(sizeof(str)/sizeof(char), sizeof(char));

    strcpy(tmp, str);

    splitter(str, &index_SF);

    obscure(tmp, index_SF);
    remove_str_pattern(str, str_export, index_SF.start, index_SF.finish);

    return tmp;
}

void obscure(char *str, index index_SF){
   for(unsigned int i = index_SF.start; i < index_SF.finish+1; ++i){
        if(str[i] != ':'){
            str[i] = '*';
        }
    }
}

void splitter(char *x, index *index_SF){
    for(unsigned int i = 0, tmp = 0; i < strlen(x); ++i){
        if(x[i] == ':'){
            ++tmp;
            if(tmp == 1){
                index_SF->start = i-2;
            }else{
                if(tmp == 5){
                    index_SF->finish = i+2;
                }
            }
        }
    }
}

unsigned int count_points(const char *x){
    int c = 1;

    for(unsigned int i = 0; i < strlen(x); ++i){
        if((x[i] == ':' && x[i+2] == ':') || (x[i] == ':' && x[i-2] == ':')){
            ++c;
        }
    }
    return c;
}

void remove_str_pattern(char *original, char *extract, unsigned int start, unsigned int finish){
    for(unsigned int i = start, j = 0; i < finish+1; ++i, ++j){
        extract[j] = original[i];
    }
}

#endif // PARSER_STACK_H_INCLUDED

这是我针对您的请求的个人头文件,使用此代码创建头文件并尝试!:D 该文件的两个“主要”功能是。1. char* return_obscure_string(char *str); 用于返回带有模糊子字符串的原始字符串..

2. char* return_pattern(char *str); 对于从字符串返回模式值..

好运的人!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

-XX:+ StressLCM,-XX:为JVM + StressGCM选项

-XX:+ UseParallelGC和-XX:+ UseParNewGC之间的区别

JVM -XX:+ StringCache参数?

-XX:-PrintGC和XX:-PrintGCDetails标志做什么?

获取明天的时间xx:xx

java -XX:-UseAdaptiveSizePolicy无效

java8 -XX:+ UseCompressedOops -XX:ObjectAlignmentInBytes = 16

HTTP状态码4xx和5xx

MPAndroidChart v3.xx:从2.xx标签升级

角4,类型“ {xx,xx}”中缺少属性“ XX”

Python正确有效地获取了DBUS对象路径(例如/ org / bluez / dev_XX_XX_XX_XX_XX_XX / playerY)

将“ XX:XX:00”更改为“ 00:XX:XX”

在rsync备份期间,远程主机关闭了与xx.xx.xx.xx的连接

如何将51.xx.xx.xx:33xxx:user:pass格式化为user:[email protected]:33xxx

#define XX在C中有什么作用?

application / xx和image / xx mimetype有什么区别

资源“ XX”无法解析

正则表达式匹配/ xx / xx /或/ xx / xx-JavaScript

在字符串末尾检查字符串'(xx%)'

org.apache.http.NoHttpResponseException:XX.XX.XX.XX:443无法响应

Python Kivy:pos_hint =(xx,xx)->错误

以“ XX到XX”的格式打印嵌套列表

在rsync备份期间,远程主机关闭了与xx.xx.xx.xx的连接

迅速3无法将类型XX的值转换为XX

PermGen的标志未按预期工作:-XX:+ CMSClassUnloadingEnabled和-XX:+ CMSPermGenSweepingEnabled

在 Excel 中将 xx:xx:xx 时间格式转换为分钟

在JS中将xx:xx转换为xxhxx

替换表达式格式 xx-xx-xxxx_12345678

如何检查数字是否为 xx.xx.xx 格式