【问题标题】:PHP-like Substring Function for CC 的类似 PHP 的子字符串函数
【发布时间】:2013-10-10 03:24:10
【问题描述】:

我一直致力于在 C 中创建字符串 (char*) 操作函数,我最新的一个是类似 PHP 的子字符串函数。我发帖是为了让其他人可以从中受益,如果有任何改进功能的建议,我将不胜感激。

【问题讨论】:

    标签: php c substring


    【解决方案1】:

    这是 C 语言中的 PHP 子字符串函数。

    char *substr(char *str, int start, int num)
    {
        //find string length
        int len = sj_strlen(str);
    
        char *result;
    
        //Return "" if start is longer than str
        if(start > len || (start*-1) > len)
        {
            result = malloc(1);
            *result = '\0';
            return result;
        }
    
        //Setting pointer to appropriate position
        if(start >= 0)
        {
            str += start;
        }
        else
        {
            str += (len+start);
        }
    
        //Allocate space for returned substring
        result = malloc(num+1);
        char *ptr = result;
    
        //Adding characters to the result
        while(num > 0 && *str)
        {
            *ptr++ = *str++;
            num--;
        }
    
        //Terminating character
        *ptr = '\0';
    
        return result;
    }
    
    int main()
    {
        char *str = "Hello, world!";
        printf("%s\n",substr(str,-10,2)); //outputs lo
       printf("%s",substr(str,7,5)); //outputs world
    }
    

    【讨论】:

    • memcpy() 不是比遍历每个字符更好的选择吗?
    • 可能要检查是否开始> len。而str == 0。和malloc的返回值。
    • 现在你已经返回了 "" 和来自 malloc() 的另一个。如果用户尝试释放()“”结果,那将是不好的。另外,需要处理 start len) return strdup("");
    • 没错,我并没有考虑如果调用 free() 会出现什么问题。但我认为我解决了第二个问题。您将如何解决free("") 问题?你会 malloc 空字符串吗?
    • 是的。 strdup("") 等同于 char *p = malloc(1); *p = 0;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 2020-12-06
    相关资源
    最近更新 更多