- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已将问题分解为几个步骤来翻译成 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);
}
所以,我的问题是
我尝试了很多方法,但仍然无法弄清楚,所以有什么想法吗?
最佳答案
您可能阅读的内容超出了必要的范围。在处理 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/
我正在尝试扩展 Codecademy pig 拉丁语转换器,以便它接受句子而不仅仅是单个单词,并转换句子中的每个单词。这是我的代码: pyg = 'ay' pyg_input = raw_input(
我正在处理一些包含日期的拉丁文本,并使用各种正则表达式模式和基于规则的语句来提取日期。我想知道我是否可以使用一种算法来训练来提取这些日期,而不是我目前使用的方法。谢谢 这是我的算法的摘录: def c
我有如下输入数据: Row1|2014-04-04 18:46:18|37.52|-84.34|30870|580.372 ms, 759.065 ms, 695.879 ms Row2|2014-0
所以基本上我对这个问题的问题是我不允许使用 Stringbuilder、数组或 String.split() 来创建这个程序。我完全难以做到这一点,因为如果我能用这些方法来解决这个程序,我就不会在这里
我已将问题分解为几个步骤来翻译成 pig 拉丁语 1.循环定位数组中的空间 - if now(arr) is not space and not null then keep searching(+1
我正在尝试将以辅音开头的用户输入的字符串转换为“ pig 拉丁语”,将所有辅音移动到单词的末尾,直到单词以元音开头,然后在单词的末尾添加“ay” 。我有一个 for 循环应该执行此操作,但由于某种原因
我正在尝试将句子转换为 pig latin,但无法正常工作。 条件:1. 如果它以元音开头,在单词后面加上 way(例如 eagle become eagleway)2.如果是辅音开头的,就查第二个字
我想将塞尔维亚拉丁语、塞尔维亚语添加到我的 Android 应用程序中。但是我无法弄清楚值文件夹的名称应该是什么。我尝试了 values-sr-rRS-Latn 但 Android studio 给出
我有一个日志文件,其中包含来自多个域的日志。现在我想对它们进行一些分析并将输出存储在一个名为域的目录中。我在日志中将域作为字段值: STORE outputlogs INTO 'testpath/DO
我从一段时间以来一直在使用 PIG,想知道如何在加载文件时不考虑第一行。我有一个包含标题的文件。所以我应该忽略第一行并转到下一行对日期列和所有列进行处理。如何解决这个问题? 谢谢 最佳答案 如果你有
我有以下输入记录: 0029029070999991901010106004 + 64333 + 023450FM-12 + 000599999V0202701N015919999999N000000
我使用 PhoneGap 开发应用程序。我使用 Ripple 在浏览器中测试我开发的应用程序,然后在真实设备中测试我的应用程序。 我有很多包含拉丁字符的行,例如 Ñ、Ü 等,当我进行不包含这些字符的查
我有以下场景- pig 版使用0.70 示例 HDFS 目录结构: /user/training/test/20100810/ /user/training/test/20100811/ /user/
我是一名优秀的程序员,十分优秀!