如何获取字符串的一部分。
例如,字符串是:
输入字符串:“53 56 4B 00 00 41 41 2F 41 54 43 43 54 52 31 2E 41 54 31 2E 4E 37 38”
| | ptr1 ptr2
ptr1
从左到右总是在第 7 位
ptr2
从右到左总是在第 13 位
输出字符串:
4B 00 00 41 41 2F 41 54 43 43 54 52 31 2E 41 54 31
如果你已经有了指针,这很简单。使用带有指针和长度的std::string
构造函数。
std::string result(ptr1, ptr2 - ptr1);
或者正如评论中指出的那样,由于指针也可以用作迭代器,因此您可以使用双迭代器构造函数:
std::string result(ptr1, ptr2);
在 C 中:
char substr[MAX_LEN + 1];
strncpy(substr, input + 6, MAX_LEN);
substr[strlen(substr) - 12] = '\0';
在 C++ 中:
substr = input.substr(6, input.size() - (6 + 12));
这不会对输入字符串进行错误处理。
如果可以使用std::string
,则可以使用该substr
方法。
使用std::string.substr
功能。它就是为此目的而设计的。
它需要两个参数:第一个是从哪里开始“提取”的索引,第二个是“提取”字符的计数。
例子:
string hello = "Hello World";
string part = hello.substr(6, hello.size() - 6); // part == "World"
所以,如果你有两个 indecesi
和j
,其中 i <= j,一个从i
to的子字符串j
,包括
string part = original.substr(i, j - i + 1);
在 C 中,不修改输入字符串:
char *ptr1,*ptr2;
if(strlen(instring)<13) { /** error; not long enough **/ }
ptr1 = instring+7;
ptr2 = instring+strlen(instring)-13;
这里的指针只是指向输入字符串中的一个位置。如果您需要在不修改原始输入字符串的情况下对其进行修改,请使用strncpy
.
我认为您的 ptr1 和 ptr2 向后或左/右混淆了。但是我要从右边获取 X 位置是从字符串的最后一个元素迭代直到我到达第 X 位置,然后计算 X 离左边多远,然后使用 string.substr()。