如何获取字符串的一部分
How to get a portion of a string
如何获取字符串的一部分。
例如,字符串为:
输入字符串:"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"
所以,如果你有两个指数i
和j
,其中i<=j、 可以找到从i
到j
的子串
string part = original.substr(i, j - i + 1);
相关文章:
- C++:如何使函数只返回作为列表一部分的字符串
- 如何将字符串的一部分转换为整数
- 如何有效地将一个大std::字符串的一部分转换为float
- 需要从字符串数组的一部分访问元素
- 当 NUL 字符被定义为字符串的一部分时,为什么 strlen() 不计算终止 NUL 字符的字节?
- 如何正确实现 std::all_of 函数来验证字符串的一部分?
- boost::async_write 跳过字符串的一部分
- 如何在不复制的情况下比较字符串的一部分?
- 我如何在QT中获得字符串的一部分
- 如何在C++中比较数组中字符串的一部分的字符串
- 如何在 c++ 中拆分字符串的一部分
- 字符数组仅占用字符串的一部分
- 如何用双C 替换字符串的一部分
- 如何在字符串中选择句子的一部分 (C++)
- 如何拆分 QString 并将一部分字符串保存在浮点数的向量中
- 为什么C 正则只能找到JavaScript Regex在字符串中找到的一部分
- 字符串操纵和忽略字符串的一部分
- 在C 中更新字符串的一部分
- 有条件地确定字符串是否是数组的一部分
- 尝试在 Cocos2d-X C++中设置一个带有整数作为其字符串一部分的 CCLabelTTF