gpt4 book ai didi

c - 如何删除字符串中每一次出现的元音

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

在一项学校作业中,我们被要求从字符串中删除所有出现的元音。

所以:“男孩踢了球”会导致"Th by kckd th bll"

每当找到元音时,所有后续字符都必须以某种方式向左移动,或者至少这是我的方法。由于我刚开始学习 C,这很可能是一种荒谬的方法。

我想做的是:当我击中第一个元音时,我将下一个字符 ([i+1])“移动”到当前位置 (i)。然后必须为每个后续字符继续移位,因此 int startshift 设置为 1,因此第一个 if block 在每个后续迭代中执行。

第一个 if block 还测试下一个字符是否是元音。如果没有这样的测试,元音前面的任何字符都会“转换”为相邻的元音,并且除了第一个元音之外的每个元音仍然存在。然而,这导致每个元音都被前面的字符替换,因此出现了 if else block 。

无论如何,这个丑陋的代码是我到目前为止想出来的。 (用于 char* 指针的名称毫无意义(我只是不知道如何调用它们),并且拥有两组它们可能是多余的。

char line[70];

char *blank;
char *hlp;

char *blanktwo;
char *hlptwo;


strcpy(line, temp->data);

int i = 0;
int j;

while (line[i] != '\n') {

if (startshift && !isvowel(line[i+1])) { // need a test for [i + 1] is vowel

blank = &line[i+1]; // blank is set to til point to the value of line[i+1]
hlp = &line[i]; // hlp is set to point to the value of line[i]

*hlp = *blank; // shifting left

} else if (startshift && isvowel(line[i+1])) {

blanktwo = &line[i+1];
hlptwo = &line[i];

*hlptwo = *blanktwo;

//*hlptwo = line[i + 2]; // LAST MOD, doesn't work


}

for (j = 0; j < 10; j++) { // TODO: j < NVOWELS

if (line[i] == vowels[j]) { // TODO: COULD TRY COPY EVERYTHING EXCEPT VOWELS
blanktwo = &line[i+1];
hlptwo = &line[i];

*hlptwo = *blanktwo;

startshift = 1;

}

}

i++;

}

printf("%s", line);

代码无效。

使用 text.txt:

The boy kicked the ball
He kicked it hard

./oblig1 remove test.txt 产生: 那个男孩踢了球

e kicked it hard

注意。我省略了用于迭代文本文件中行的外部 while 循环。

最佳答案

只是一些思考,因为这是家庭作业,我不想破坏乐趣:

您也可以在不使用第二个“temp->data”缓冲区的情况下解决这个问题。如果给定的输入字符串在一个可修改的内存块中,比如

char data[] = "The boy kicked the ball";

您还可以编写一个程序,在缓冲区中维护两个指针:

  • 一个指针指向字符串中需要写入下一个元音的位置;每当写一个元音时,这个指针就会前进。
  • 第二个指针指向字符串中下一个要考虑的字符的读取位置;每当读取一个字符时,此指针都会前进。

如果您考虑一下,您会发现第一个指针不会像第二个指针那样快(因为每个字符都被读取,但不是每个字符都被写出 - 元音被跳过)。

如果您选择这条路线,请考虑您可能需要正确终止字符串。

关于c - 如何删除字符串中每一次出现的元音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7443630/

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