gpt4 book ai didi

c - 在C编程中;给定一个字符串,递归(无循环)计算一个新字符串,其中所有出现的 "pi"都已替换为 "3.14"。

转载 作者:太空宇宙 更新时间:2023-11-04 04:46:58 25 4
gpt4 key购买 nike

我的代码不能正常工作,我做错了什么?正如标题所说,它应该创建一个用 3.14 替换“pi”的新字符串。当我输入 pi 时它工作正常,但是当我输入类似“pipi”的东西时它只返回 3.14 而不是 3.143.14 ...感谢您的帮助:)

#include<stdio.h>
#include<string.h>
char c[50];
char xy(char a[],int b)
{
if(b>=strlen(a))
return a;
else if(a[b]=='p' && a[b+1]=='i'){
c[b]='3';
c[b+1]='.';
c[b+2]='1';
c[b+3]='4';
return xy(a,b+4);}
else if(a[b]!='i') {
c[b]=a[b];
return xy(a,b+1);
}
}

int main()
{
char a[50];
scanf("%s",&a);
xy(a,0);
printf("%s",c);
return 0;
}

最佳答案

您的代码可能会被调侃成工作,但转发指针会更有效。您的代码的一个问题是 scanf("%s", &a) 将在第一个空格处停止。

以下返工消除了返回任何东西的需要,只有一个流动方向。它还消除了全局“c”。

最后,它依赖于 C 字符串以空字节 ('\0') 终止这一事实,从而无需了解 src 字符串的大小。

注意:一个好的优化器会把它变成一个循环:)

#include <stdio.h>

void transform(char* dst, const char* src)
{
if(!*src) {
*dst = '\0';
return;
}
if(*src == 'p' && *(src + 1) == 'i') {
*(dst++) = '3';
*(dst++) = '.';
*(dst++) = '1';
*(dst++) = '4';
src += 2; // skip 'pi' in src.
} else {
*(dst++) = *(src++);
}
transform(dst, src);
}

int main()
{
char a[64], b[64];
fgets(a, sizeof(a), stdin);
transform(b, a);
printf("%s", b);

return 0;
}

现场演示:http://ideone.com/15q17k

关于c - 在C编程中;给定一个字符串,递归(无循环)计算一个新字符串,其中所有出现的 "pi"都已替换为 "3.14"。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19895419/

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