Представленные выше ответы, похоже, не на 100% понимают контракт strchr () и не обеспечивают истинную прямую замену ... обычно он возвращает указатель на строку, начинающуюся с этого символа (НЕ индекса).
"Более чистая" реализация:
Предупреждение: Не уверен, что это настолько чисто, насколько это возможно, так как это, вероятно, дает новую строку, не указывающую на оригинал, как в C ++.Может быть невозможно получить истинный указатель substr.Но я не эксперт по C #.
/// <summary>
/// C++ strchr Equivalent
/// </summary>
/// Let you fill out the stupid <param ...> tags.
private string strchr(string originalString, char charToSearch)
{
int found = originalString.IndexOf(charToSearch);
return found > -1 ? originalString.Substring(found) : null;
}
Но я также нашел эту реализацию еще лучше, потому что вы не можете просто сделать C ++ ptr math of + 1 для строки, чтобы пройти через терминатор ...
/// <summary>
/// C++ strchr Equivalent (with jump past character option)
/// </summary>
/// <param name="originalString"></param>
/// <param name="charToSearch"></param>
/// <param name="pastIt"></param>
/// <returns>String starting at the search char</returns>
private string strchr(string originalString, char charToSearch, bool pastIt)
{
int found = originalString.IndexOf(charToSearch);
return found > -1 ? originalString.Substring(found + (pastIt ? 1 : 0)) : null;
}
/// <summary>
/// C++ strchr Equivalent (Pure)
/// </summary>
private string strchr(string originalString, char charToSearch)
{
return strchr(originalString, charToSearch, false);
}