gpt4 book ai didi

c - 在c中将句子翻译成 pig 拉丁语

转载 作者:行者123 更新时间:2023-11-30 17:01:12 26 4
gpt4 key购买 nike

我已将问题分解为几个步骤来翻译成 pig 拉丁语

1.循环定位数组中的空间

- if now(arr) is not space and not null then keep searching(+1 arr)
- if null then break (mean that go to next step 2)

2.开始将值复制到pig latin变量

-store start to temp
-start copying value from start until locatespace-2 to pig_latin
-add temp to pig_latin[index]
-add char 'a' and 'y' and to piglatin[index+1] and piglatin[locatespace+2]
-add space to piglatin[index+3]

3.Start是locatespace+1(在空格之后)

//我的算法结束

所以,我已经更新了我的程序并成功地用我自己的程序做到了这一点...这是最后一个问题,它与 null 相关

void pigLatin(char english[])
{
int locateSpace = 0;
int index = 0;
int start = 0;
int i = 0;
char piglatin[80];

for (; english[i] != '\0'; i++, locateSpace++)
{
char temp = english[i];

for (; english[i] != ' ' && english[i] != '\0'; i++) {
locateSpace++;
}

for (; start < locateSpace - 1 ; start++ , index++) {
piglatin[index] = english[start +1];
}

piglatin[index] = temp;
piglatin[index+1] = 'a';
piglatin[index+2] = 'y';
piglatin[index + 3] = ' ';

index += 4;
start = locateSpace + 1;
}
piglatin[index] = '\0';
printf("\n%s", piglatin);
}

所以,我的问题是

  • 如何插入 null 来结束 Piglatin 变量?看来我不知道这个

我尝试了很多方法,但仍然无法弄清楚,所以有什么想法吗?

最佳答案

您可能阅读的内容超出了必要的范围。在处理 english 字符串时,您可能会发现简单地使用指向每个字符串中当前位置的指针比尝试跟踪数组索引更容易(例如 start =locateSpace + 1;).如果将指针e设置为english并将指针p设置为piglatin,则可以降低你的english 字符串,当您向 piglatin 添加字符时,只需向前移动每个指针即可。

以下是一个简短的示例。如果需要,您可以轻松地从指针使用转换回数组索引,但您可能会发现推进指针是一种保留字符计数的更自然的方式。例如,下面的常量 MAXC 可以是您的 40 (但您也可以让它处理长行):

void piglatin (char *english)
{
char piglatin[MAXC] = "";
char *e = english, *p = piglatin;
int c = 0, first = 1;

/* for each char in english and len < MAXC - 2 */
for (; *e && e - english + 2 < MAXC; e++) {
if (('A' <= *e && *e < 'Z') || ('a' <= *e && *e < 'z')) {
if (first == 1) { /* if first char in word */
c = *e, first = 0; /* save, unset flag */
continue; /* get next char */
}
else
*p++ = *e; /* save char in piglatin */
}
else if (*e == ' ') { /* if space, add c+'ay ' */
*p++ = c, *p++ = 'a', *p++ = 'y', *p++ = *e;
first = 1; /* reset first flag */
}
} /* add c+'ay ' for last word and print both */
*p++ = c, *p++ = 'a', *p++ = 'y', *p++ = *e, *p = 0;
printf (" english : %s\n piglatin : %s\n", english, piglatin);
}

(注意:代码当前忽略标点符号(例如任何,;...)并且不担心更改大写小写等..)

“Hello, World” 示例中使用该函数的一个简单示例是:

#include <stdio.h>

enum { MAXC = 256 };

void piglatin (char *e);

int main (void) {

char english[MAXC] = "Hello, World";

piglatin (english);

return 0;
}

示例使用/输出

$ ./bin/str_eng2piglatin
english : Hello, World
piglatin : elloHay orldWay

您可以添加它来处理 Piglatin 的更多方面(例如,如果第一个字符是元音,则不进位,等等)仔细检查一下,如果您有任何问题,请告诉我。

您的索引版本

您与上一个版本非常接近。只要再加上几个条件,你就可以回家了。查看 piglatin[index + 1] = 'y'; 后面的代码并删除 && english[i + 1] != '\0':

void pigLatin (char english[])
{
int index = 0;
char piglatin[80];

for (int i = 0, start = 0 , locateSpace = 0; english[i]; i++, locateSpace++)
{
char temp = english[i];

for (;english[i] != ' ' && english[i]; locateSpace++, i++) {}

for (; start < locateSpace ; start++, index++)
piglatin[index] = english[start +1];

piglatin[index - 1] = temp;
piglatin[index] = 'a';
piglatin[index + 1] = 'y';
if (english[i] == ' ')
piglatin[index + 2] = ' ', index += 3;
else
index += 2;

start = locateSpace + 1;
}
piglatin[index] = 0; /* nul-terminate string */
printf("\n'%s'\n", piglatin);
}

关于c - 在c中将句子翻译成 pig 拉丁语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37176442/

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