gpt4 book ai didi

c - 如何仅使用指针比较字符串的单词词典大小 (aba < ada)

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

我是一年级的学生,目前正在学习“C”。这是我真正碰壁的第一个任务,任务是:

“创建一个函数,它接收一个字符串指针和一个字符串大小的指针。字符串本身包含一个句子。该函数将返回一个指向最大字典大小单词开头的指针(aba < ada )和使用大小指针的字长值。”* 您不能使用运算符 [] 和索引,只能使用指针来完成此任务!

示例:对于句子“aba ada aaa”,函数将返回“ada”,稍后将由 main 打印。

我感觉有点困难,我知道我需要遍历整个字符串,使用至少 2 个指针(?)我需要不断比较它们并放弃小的指针,直到最终,我得到最大的单词及其尺寸。但似乎找不到办法做到这一点。

我之前写过一段超长的代码,但并没有真正起作用,而且在我看来,我错过了一些关键的东西,而且这段代码不必很长。

int findHighest(char *ptr, int *size)
{
int nSize = 0, nSize1 = 0;
char *ptr3;

for (char *ptr1 = ptr; *ptr1 != '\0'; ptr1++)
{
for (char *ptr2 = ptr1; (*ptr2 != ' ') && (*ptr2 != '\0') ; ptr2++)
{
nSize++;
ptr3 = ptr2;
nSize1 = nSize;
}
}
}
void main()
{
char sentence[100] = { 0 };
printf("enter your sentence:\n");
gets(sentence);
char sentence2[100];
int size;
strcpy(sentence2, findHighest(sentence, &size));
sentence2[size] = '\0';
printf("the biggest word is:'%s'\n", sentence2);
system("pause");
}

最佳答案

如果您使用整数执行类似的任务,它会是什么样子?像这样的事情:

// With ints instead of (sub)strings:
int findHighest(int ints[], int *size) {
int greatest = ints[0];

for (int i = 1; i < *size; i++) {
if (ints[i] > greatest) greatest = ints[i];
}

return greatest;
}

对于您的实际问题来说,这是一个非常好的模型。问题是如何调整类似的内容来处理输入类型和形式的差异,并且必须避免使用索引,并要求返回最大字符串的长度。

但是在我们继续之前,让我们先解决一个可能让您感到困惑的问题。按照翻译,问题说“函数将返回一个指向最大单词开头的指针”,而在示例中,您说“函数将返回'ada'”。首先,不,该函数永远无法返回 "ada" 本身,因为那是一个数组,并且您无法在 C 中返回数组。但更重要的是,我读到了这个问题,你的函数是返回一个指向输入字符串中“ada”子字符串开头的指针。在您的示例中,如果您使用 puts() 打印该内容,那么您将看到 ada aaa

那么如何进行呢?让我们从正确的函数签名开始:

char *findHighest(char *string, int *size) {

接下来让我们观察一下,只要输入不包含前导空格,第一个单词的开头就与句子的开头相同:

    char *greatest = string;

现在,您需要找到下一个单词的开头,并且当前单词的长度也应该很容易从中得出。给定指向下一个单词的指针,您可以通过 strcmp() 比较这两个单词,前提是您愿意假设单词之间的空格按字典顺序小于单词中出现的所有字母。对于所有 ASCII 兼容的单字节编码和 UTF-8 来说,情况确实如此:所有小于 ' ' 的字符都是控制字符。但是,如果您想要更安全,则可以使用 strncmp() 代替,同时考虑单词长度。

当您浏览字符串时,您不仅需要跟踪指向迄今为止最大单词的指针,还需要跟踪它的长度。最后,您只需

    *size = length_of_greatest;
return greatest;
}

这是一项学术练习,我将剩余的细节留给您解决。

关于c - 如何仅使用指针比较字符串的单词词典大小 (aba < ada),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54159651/

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