Преобразование токенизатора строк

#c# #c

#c# #c

Вопрос:

Может кто-нибудь, пожалуйста, помочь мне в преобразовании кода StrTok в C # из C ?

 strFileName = StringFunctions.StrTok(strFileToCopy, "\");
strFileName = StringFunctions.StrTok(null, "");
  

Пробовал код:

 string strFileName = ""; 

string[] FileNames = Regex.Split(strFileToCopy, "\"); 
  

Комментарии:

1. Можете ли вы показать нам, что вы уже пробовали? Если вы ничего не пробовали, это может быть хорошей отправной точкой

2. Итак, я использовал разделение для StrTok.. Это правильный путь??? string strFileName = «»; string[] Имена файлов = Регулярное выражение.Split(strFileToCopy, «\»);

3. Что было не так с Split ?

4. Я хотел понять, как StrTok можно использовать лучше? с помощью приведенного выше кода?

5. Если вы действительно получаете имя файла, используйте Path.GetFileName(…)

Ответ №1:

На основе описания и примера StrTok здесь: http://www.cplusplus.com/reference/cstring/strtok /, это кажется * примерно эквивалентным Split методу string :

 var str = "- This, a sample string.";
var pch = str.Split(" ,.-".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
foreach (var result in pch)
{
    Console.WriteLine(result);
}
  

Это выводит:

Это

a

пример

строка

который соответствует образцу со связанной страницы strtok.

* Я думаю, разница в том, что для получения всех записей с помощью strtok вам нужно вызывать его повторно, передавая NULL для последующих вызовов, тогда как C # Split просто возвращает массив токенов.


Как предлагали другие в комментариях, если вы просто хотите получить имя файла, вы должны использовать Path.GetFileName вместо этого (вам нужно будет добавить using System.IO; ):

 string str = @"c:usersjohndesktoptest.txt";
Console.WriteLine(Path.GetFileName(str));
  

Выводит:

test.txt

Ответ №2:

Вы можете использовать stringstream из std

 std::istringstream ss("This is the line to tokenize");
std::string token;

while(std::getline(ss, token, ' '))
    std::cout << "line: " << token << "n";

// Out:
/*
This
is
the
line
to
tokenize
*/
  

Комментарии:

1. Это не отвечает на вопрос «как мне преобразовать этот код strtok в c #»!