我必须尝试使用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
}
感谢您的帮助。
答案 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)
这是我的解决方案。
在堆上为子字符串创建空间
通过源迭代,直到您点击字符串的末尾或完成复制。将字符复制到要返回的子字符串
添加终止字符
返回结果
希望这有帮助
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);
}