【发布时间】:2018-11-08 16:31:32
【问题描述】:
所以我在这里得到了这个:
#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}
其中提取需要获取给定输入的最后一个双“:”之后的所有字符:
- halloString 的“o”
- 香水串的“11”
- “bfdr:hfgd46dG”代表veryLongString
简而言之,我的问题是找到 *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 语言中的经验非常有限,当您离开数组时,您往往每次都会得到不同的输出,因此有机会同时使用 Temp 字符串在我认为足够低的原始字符串的最后一个之后直接匹配一个额外的元素。
老实说,这是我现在唯一的想法。
【问题讨论】:
-
你的问题是,如何找到最后一次出现的
"::"或者如何找到字符串的长度? -
在这种情况下您可以使用
strlen,因为您使用的是字符串。 -
您说的是当您访问数组末尾时字符串匹配的“机会”。这是一种非常危险的心态;您需要了解访问数组末尾之后是未定义的行为,并且标准说 anything 可能发生。
-
这似乎是一个 XY 问题(而不是 XY 问题,而不仅仅是一个问题)。 @FiddlingBits 正在像我一样阅读问题;看来您需要一种方法来回溯您的字符串以查找分隔符并在此过程中组装您的结果。要么这样,要么我们都遭受同样的错觉(一种明显的可能性)。
标签: c