0

我必须尝试使用​​ 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
}

感谢您的帮助。

4

3 回答 3

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';
于 2012-11-05T02:01:04.597 回答
0

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

于 2012-11-05T01:58:19.487 回答
0

这是我的解决方案。

  1. 在堆上为您的子字符串腾出空间

  2. 遍历源代码,直到到达字符串的末尾或完成复制。将字符复制到要返回的子字符串

  3. 添加终止字符

  4. 返回结果

希望这可以帮助

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);                                   
}
于 2012-11-05T02:09:08.527 回答