如何从完整字符串中获取子字符串?

时间:2012-11-05 01:49:02

标签: c

我必须尝试使用​​GetSubstring函数来打印结果,以便

printf(GetSubstring("character", 4, 3, resultArray));

输出act

限制:不能调用其他函数或宏,不能添加任何其他变量,不能将变量设置为0.只能更改函数GetSubstring。

这是我目前的代码。

#include <stdio.h>
#include <stdlib.h>
char *GetSubstring(const char source[], int start, int count, char result[]);

int main(void)
{
const char source[] = "one two three";
char result[] = "123456789012345678";

puts(GetSubstring("character", 4, 3, result));

return(EXIT_SUCCESS);
}


char *GetSubstring(const char source[], int start, int count, char result[])
{
    char *copy = result;
    for (; *source != '\0' || *source == source[start]; start--)
    {
        while (*source != '\0')
        {
        *result++ = *source++;
        }

    }

    *result = '\0';
    return (copy);                                      // outputs character
    // return (result);                                 // outputs 012345678
}

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

这一行应该终止字符串:

*result += '\0'

但它不是因为你在现有值上加零。尝试将其设置为零:

*result = '\0'

更重要的是,你的循环是怪人。这包含了很多麻烦的食谱:

for (; *source != '\0' || *source == source[start]; start--)
{
    while (*source != '\0')
    {
        *result++ = *source++;
    }
}

为什么不从start开始,然后增加 ......

int i = 0;
const char *str = &source[start];

while( i < count && *str != '\0' ) {
    result[i++] = *str++;
}
result[i] = '\0';

答案 1 :(得分:0)

错误似乎在这里:result += '\0'。应该是*result = '\0';

答案 2 :(得分:0)

这是我的解决方案。

  1. 在堆上为子字符串创建空间

  2. 通过源迭代,直到您点击字符串的末尾或完成复制。将字符复制到要返回的子字符串

  3. 添加终止字符

  4. 返回结果

  5. 希望这有帮助

    char *GetSubstring(const char source[], int start, int count, char result[])
    {
        int i = 0;
        char *substr = (char *) malloc(sizeof(char));
        for (; source[start] != '\0' && count > 0; count--)
        {
            substr[i++] = source[start++];
        }
    
        substr[i] = '\0';
        return (substr);                                   
    }