如何删除字符串中的前 2 个字符(如果它有"-")

How to remove first 2 characters in a string if it has a '-'

本文关键字:字符 如果 何删除 删除 字符串      更新时间:2023-10-16

在这种情况下p_officialTitle通常等于"1-Application""Application"。如果它有一个破折号,则必须删除它,并且它之前的数字也需要删除。MidFind方法不起作用。还有其他建议吗?

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)将只返回剩余的字符。

相关文章: