gpt4 book ai didi

字符没有被正确复制

转载 作者:行者123 更新时间:2023-11-30 16:08:18 24 4
gpt4 key购买 nike

这个函数应该扩展像 "a-z" 这样的表达式在s1"abcd....xyz"s2 ,但由于某些原因,每次我打印 s2 时它都无法正常工作它停在应该扩展的第二个字符处。
例如,如果 s1="a-z" ,打印s2给我"ab"
为什么?

void expand(char s1[], char s2[]) {
int i, j, k;
for (i = 0, j = 0; s1[i] != '\0'; i++, j++) {
if (s1[i] == '-' && s1[i-1] != ' ' && s1[i+1] != ' ') {
for (k = s1[i-1]+1; k < s1[i+1]; ++j, ++k)
s2[j] = k;
} else {
s2[j] = s1[i];
}
}
}

该函数的调用方式如下:

int caller (void) {
char des[30];
expand("a-z", des);
printf("%s\n", des);
}

最佳答案

为什么会有这么多并发症?您的代码有一些问题,但是,它为我产生的输出比您得到的更有意义。

$ ./main.out
abcdefghijklmnopqrstuvwxyz

只是,您需要修改内循环中的终止条件以包含最后一个字符。

让我帮助您提供一个可读的解决方案。我试图仅从您的代码要点中得出它,因为那里没有什么可怕的错误。还有比下面更好的方法来编写代码,但为了快速起见......您可以放置​​自己的验证。

void expand (char s1[], char s2[])
{
int cnt = 0;
for (int i = 0; i < s1[i] != '\0'; ++i)
{
switch (s1[i])
{
case '-':
for (char k = s1[i-1]+1; k < s1[i+1]; ++k)
s2[cnt++] = k;
continue;
break;
default:
s2[cnt++] = s1[i];
}
}
}

关于字符没有被正确复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59390376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com