如何删除字符串中的前 2 个字符(如果它有"-")
How to remove first 2 characters in a string if it has a '-'
在这种情况下p_officialTitle
通常等于"1-Application"
或"Application"
。如果它有一个破折号,则必须删除它,并且它之前的数字也需要删除。Mid
和Find
方法不起作用。还有其他建议吗?
DIIXDAPI_INDEX_FIELD_TYPE* p_OfficialTitle = Find(param->documentIndexFieldList, D_OFFICIAL_TITLE);
//Name a Temporary CString; in that CString remove anything with a '-' --- This cleans up the naming convention
CString strTemp = p_OfficialTitle->szFieldValue.Get();
p_OfficialTitle->szFieldValue.Set(strTemp.Mid(strTemp.Find(_T('-'))));
>CString::Find()
返回一个从 0 开始的索引,如果未找到字符/子字符串,则返回-1
。
CString::Mid()
返回从指定索引开始的子字符串。
当Find()
返回-1
时,您没有处理这种情况,例如对于"Application"
。 您不能将-1
作为起始索引传递给Mid()
,因此您需要检查该条件。 而且由于您要删除所有内容,包括找到-
,因此您需要将其索引+1传递给Mid()
,例如:
CString strTemp = p_OfficialTitle->szFieldValue.Get((; int index = strTemp.Find(_T('-'((; if (index != -1( {//<-- 添加这个 p_OfficialTitle->szFieldValue.Set(strTemp.Mid(index+1((;<-- 添加 +1 }
或者,您可以简单地删除if
(如果您不介意在找不到-
时进行冗余Set()
调用(,例如:
CString strTemp = p_OfficialTitle->szFieldValue.Get((; p_OfficialTitle->szFieldValue.Set(strTemp.Mid(strTemp.Find(_T('-'((+1((;
由于Find('-') + 1
对于"Application"
是0
的,对于"1-Application"
是2
的,所以如果没有找到-
Mid(0)
将返回整个字符串,如果找到-
,Mid(2)
将只返回剩余的字符。
相关文章:
- 如何删除字符串中的前 2 个字符(如果它有"-")
- 如果我在字符数组上使用 close() 会发生什么?
- 如果我们在其中输入一个整数,则字符会给出整数作为输出,但是当分配给它一个整数时,这不会发生。为什么?
- 有没有办法搜索向量的元素,<String>然后检查它是否包含特定的字符,如果它确实打印了它
- C++如果旋转是特定字符,请插入符号
- 如果是数字或字符,请检查输入
- 如果用户输入的字符过多,则创建错误消息
- 异常处理:如果用户输入不是三个特定字符之一
- 如果字符串在 C/C++ 中没有 NUL 字符(以防编译器允许它通过)会发生什么情况?
- 如果带有字符数组的语句无法正常工作
- 如果字符串向量包含字符'p',如何检查 c++
- C++:告诉用户输入 A、B 或 C,但如果他们输入不同的字符怎么办?
- 如果一个字符,比如说"9",我减去"0",我在结果上使用 is 数字,我是真还是假
- 如果必须包含西里尔字符,如何将 char* 转换为 std::string?
- 如果不是十六进制,则QT从qlineedit中删除字符
- 如果用户在 int 中输入字符,如何使用输入
- 重命名两个目录中的文件名,如果它们之间的某些字符匹配 - 矢量下标超出范围
- 尝试创建一个评估字符的bool函数,如果字母数字为字母,则返回true
- 我的 c++ 程序不打印任何字符,但是如果我将它们更改为 int,代码可以完美运行
- 用户输入逻辑运算符符号或数字,如果输入字符或字符串则无效