C - 使用分隔符“/”使用 strtok 拆分字符串 "mv <from> <to>"
C - split the string "mv <from> <to>" using strtok by delimiter " /"
我得到了一个固定格式的输入。例如:
char* str = "mv /Folder1/folder 2/f1 /Folder1/folder 3"
我需要拆分它,这样我就会得到两个分开的字符串,
str1 == /Folder1/folder 2/f1
str2 == /Folder1/folder 3
我试过使用 strtok(str, " /") 但它不起作用。它忽略了 space
分隔符并且只使用“/”。
有什么想法吗?
非常感谢!
Here is a brief explanation of strtok. 当您传递“/”时,您是在告诉 strtok 在“/”或“”上拆分。事实上,strtok 可能不会轻易满足您的需求,因为它不会使用一对字符来拆分,而是使用每个字符来拆分。然后,您必须提供逻辑来重新组合组合在一起但其中有 space 的拆分项。您可以通过查找因在“/”中背对背拆分字符而导致的空令牌来实现。那会告诉您您正处于新路径字符串的开头。但是,该解决方案不会非常可靠,因为有人可以在 mv 之后输入双 spaces 并破坏它。大多数工具都要求您使用外部分隔符,例如引号或使用“\”作为文件名和路径的一部分的 space。
您传递给 strtok
的第二个字符串不是它要搜索的模式——它是一组字符,它会搜索该组中的任何一项。
在这种情况下,我们需要搜索一个模式,因此我们可以使用(一种可能性)strstr
:
进行搜索
#include <string.h>
#include <stdio.h>
int main() {
char* str = "mv /Folder1/folder 2/f1 /Folder1/folder 3";
char *prev = strstr(str, " /");
char *pos;
while (NULL != prev) {
pos = strstr(prev+1, " /");
printf("%.*s\n", (int)(pos-prev), prev);
prev = pos;
}
}
我得到了一个固定格式的输入。例如:
char* str = "mv /Folder1/folder 2/f1 /Folder1/folder 3"
我需要拆分它,这样我就会得到两个分开的字符串,
str1 == /Folder1/folder 2/f1
str2 == /Folder1/folder 3
我试过使用 strtok(str, " /") 但它不起作用。它忽略了 space 分隔符并且只使用“/”。
有什么想法吗?
非常感谢!
Here is a brief explanation of strtok. 当您传递“/”时,您是在告诉 strtok 在“/”或“”上拆分。事实上,strtok 可能不会轻易满足您的需求,因为它不会使用一对字符来拆分,而是使用每个字符来拆分。然后,您必须提供逻辑来重新组合组合在一起但其中有 space 的拆分项。您可以通过查找因在“/”中背对背拆分字符而导致的空令牌来实现。那会告诉您您正处于新路径字符串的开头。但是,该解决方案不会非常可靠,因为有人可以在 mv 之后输入双 spaces 并破坏它。大多数工具都要求您使用外部分隔符,例如引号或使用“\”作为文件名和路径的一部分的 space。
您传递给 strtok
的第二个字符串不是它要搜索的模式——它是一组字符,它会搜索该组中的任何一项。
在这种情况下,我们需要搜索一个模式,因此我们可以使用(一种可能性)strstr
:
#include <string.h>
#include <stdio.h>
int main() {
char* str = "mv /Folder1/folder 2/f1 /Folder1/folder 3";
char *prev = strstr(str, " /");
char *pos;
while (NULL != prev) {
pos = strstr(prev+1, " /");
printf("%.*s\n", (int)(pos-prev), prev);
prev = pos;
}
}