在使用msys2的时候,需要使用linux风格目录,而从windows复制过来的目录字符串,需要一个一个去改正反斜杠,还要给带空格的加上单引号,挺麻烦,于是开发了这个工具直接转。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<string> SplitString(const char* target, const char* delim)
{
vector<string> v;
int length = strlen(target);
char* s = new char[length + 1];
strcpy(s, target);
char* p = strtok(s, delim);
while (p)
{
v.push_back(p);
p = strtok(NULL, delim);
}
delete[] s;
return v;
}
char siweilicheng[];
int main(int argc, char* argv[])
{
if (argc == 1)
{
printf("用法 \r\n\
windirtolinuxdir.exe windows风格字符串\r\n\
utf8togbk.exe --info");
return 0;
}
int ret = strcmp(argv[1], "--info");
if (ret == 0 && argc == 2)
{
cout << siweilicheng << endl;
return 0;
}
string windir = argv[1];
if (argc > 2)
{
for (int i = 2; i < argc; i++)
{
windir += ' ';
windir += argv[i];
}
}
vector<string> pieces = SplitString(windir.c_str(), "\\");
for (auto& piece : pieces)
{
if (piece.find_first_of(' ') != string::npos)
{
piece = "'" + piece + "'";
}
}
string linuxdir;
for (auto& piece : pieces)
{
linuxdir = linuxdir + "/" + piece;
}
linuxdir[1] = tolower(linuxdir[1]);
string::iterator it; //指向string类的迭代器。你可以理解为指针
for (it = linuxdir.begin(); it != linuxdir.end(); it++)
{
if (*it == ':')
{
linuxdir.erase(it); //删除it处的一个字符
break;
}
}
cout << linuxdir << endl;
return 0;
}
char siweilicheng[] =
{
"将windows风格的目录替换为linux风格的目录,如果字符串太长,一个一个地将`\\`改为`/`太麻烦了。\r\n\
所以准备写这个程序用来自动转换目录风格。\r\n\
现在需求只有一个,就是转目录,其它不考虑。\r\n\
主要要做4件事。一是将`\\`转为`/`。二是为有空格的字符串加上单引号`'`包起来。三是将盘符`C:`修改为`/c`。\r\n\
用户输入1个参数就行,windows风格目录的字符串,程序处理后输出linux风格目录的字符串。\r\n\
测试时觉得还不够好用,需要用户添加一个双引号表示一个参数。需要改为拿到目录直接扔给程序,让他给出正确结果。\r\n\
实现起来还是比较容易的,一个判断一个循环加5行代码搞定。\r\n\
开发软件的过程就是一个积累的过程,一行一行的去积累。这样到了后面就可以非常容易的去使用之前的经验,之前写好的代码。"
};
编译的时候,取消sdl检查就行。