gpt4 book ai didi

C-从指针查找数组长度

转载 作者:行者123 更新时间:2023-11-30 19:03:59 25 4
gpt4 key购买 nike

所以我在这里得到了这个:

#include <stdio.h>

char halloString[] = "Ha::ll::o";
char perfumeString[] = "47::11";
char veryLongString[] = "47::11::GHesd::dghsr::bfdr:hfgd46dG";

char *extract (char *input) {somethinghappenshere}

其中 extract 需要获取给定输入的最后一个双“:”之后的所有字符:

  • “o”代表 HalloString
  • “11”代表香水字符串
  • “bfdr:hfgd46dG”代表非常长的字符串

简而言之,我的问题是找到 *input 指向的字符串的长度。据我了解,如果不做一些非常粗略的事情,这种情况就不会发生。

我假设无法以良好的方式获取长度是否正确?

如果是这样的话,这将是一个可怕的想法,例如:

char stringToProcessTemp1[50];
char stringToProcessTemp2[50];
char stringToProcess[50];
for (int i = 0; i < 50; i++) {
stringToProcessTemp1[i] = input + i;
}
for (int i = 0; i < 50; i++) {
stringToProcessTemp2[i] = input + i;
}
for (int i = 0; i < 50; i++) {
if (stringToProcessTemp1[i] == stringToProcessTemp2[i]) {
stringToProcessTemp[i] = stringToProcessTemp1[i];
}
}

稍后检查第一个空索引在哪里,并将其之前的所有内容保存为使用的字符串,因为根据我在 C 方面的非常有限的经验,当您走出数组时,您每次都会得到不同的输出,因此有可能两个临时字符串直接在原始字符串的最后一个元素之后匹配一个额外的元素,我认为这个元素足够低。

老实说,这是我现在唯一的想法。

最佳答案

求出字符串的长度是没有问题的。 strlen 会为你做到这一点。但是,您甚至不需要它。

您可以使用 strstr 函数查找字符串中的子字符串,在本例中为 "::"。当你找到一个后,继续寻找你找到的最后一个,直到你再也找不到它,那么你找到的最后一个就是你想要的。然后您需要紧随其后开始的子字符串。

char *extract(char *input)
{
char *last = NULL, *start = input, *curr;
while ((curr == strstr(start, "::")) != NULL) {
last = curr; // keep track of the last "::" found
start = last + 1; // move the starting string to right after the last "::"
// move up 1 instead of 2 in case of ":::"
}
if (last != NULL) {
last +=2; // We found one; move just past the "::"
}
return last;
}

关于C-从指针查找数组长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53212077/

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