如何获取字符串的一部分

时间:2012-07-24 17:20:16

标签: c++ c string

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

例如,字符串是:

  
    

输入字符串:“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

6 个答案:

答案 0 :(得分:5)

如果您已经有指针,这很简单。使用带有指针和长度的std::string constructor

std::string result(ptr1, ptr2 - ptr1);

或者如注释中所指出的,因为指针也可以用作迭代器,所以你可以使用双迭代器构造函数:

std::string result(ptr1, ptr2);

答案 1 :(得分:4)

在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));

这对输入字符串没有错误处理。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

使用std::string.substr功能。它是为此目的而设计的。

需要两个基础:第一个是从哪里开始“提取”的索引,第二个是“提取”字符的计数。

示例:

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

因此,如果您有两个ij,其中i <= j,则ij的子字符串将包含在内/ p>

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

答案 4 :(得分:1)

在C中,不修改输入字符串:

char *ptr1,*ptr2;
if(strlen(instring)<13) { /** error; not long enough **/ }
ptr1 = instring+7;
ptr2 = instring+strlen(instring)-13;

此处的指针只指向输入字符串中的位置。如果您需要在不修改原始输入字符串的情况下进行修改,请使用strncpy

答案 5 :(得分:1)

我认为你的ptr1和ptr2向后或向左/向右混合了。但是我要做的是从右边获取X位置是从字符串的最后一个元素迭代,直到我到达第X个位置,然后计算X从左边开始的距离,然后使用string.substr()。

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