如何获取字符串的一部分

How to get a portion of a string

本文关键字:字符串 一部分 获取 何获取      更新时间:2023-10-16

如何获取字符串的一部分。

例如,字符串为:

输入字符串:"53 56 4B 00 41 41 2F 41 54 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] = '';

在C++中:

substr = input.substr(6, input.size() - (6 + 12));

这不会对输入字符串进行错误处理。

如果可以使用std::string,则可以使用substr方法。

在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().

http://www.cplusplus.com/reference/string/string/substr/

使用std::string.substr函数。它是为这个目的而设计的。

它需要两个参数:第一个是从哪里开始"提取"的索引,第二个是"提取"字符的计数。

示例:

string hello = "Hello World";
string part = hello.substr(6, hello.size() - 6); // part == "World"

所以,如果你有两个指数ij,其中i<=j、 可以找到从ij的子串

string part = original.substr(i, j - i + 1);