为什么文件名不能包含下列任何字符 \/:*?“<>|

/ \ 是路径分割符(Windows的路径分隔符是反斜杠,但处理文件的API接受带正斜杠的路径名)。

< > 是输入输出重定向,比如想把foo.exe的输出重定向到文件abc.txt::foo > abc.txt;把anc.txt的内容输入给foo.exe:foo < abc.txt。

: 是用来区分盘符,比如C: D:。

在搜索文件时,如果你忘了文件名其中一个或几个字,可以用“?”和“*”代替。“?”代替一个字符,“*”代替几个字符。“文件的格式是*.doc”,这个“*”可以代替任何字符。

“ 是用来标记带空格的路径,比如"C:\Program Files"。

| 是管道,把一个程序的输出作为另一个程序的输入,比如type命令查看文件内容,但如果文件很大一屏显示不下的话就需要把输出通过管道给more命令,这样每输出满一屏就会停下来直到你按键再输出下一屏: type abc.txt | more。

除了这把个字符,Windows还不允许文件名包含空字符(NULL,U+0000)。

PS:Windows不允许只包含点的文件名,比如.,..,...等等,因为Windows中.代表当前文件夹而..代表上一级文件夹。

作者:0xB160C0C5

链接:https://www.zhihu.com/question/38751059/answer/100736932

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

实验内容:请编制c语言程序,利用顺序存储方式实现下列功能:根据键盘输入数据建立一个线性表,并输出该线性表;然后根据屏幕菜单的选择,可以进行数据的插入、删除、查找,并在插入或删除数据后,再输出线性表;最后在屏幕菜单中选择结束按钮,即可结束程序的运行。完整代码: #include <stdio.h> #include<iostream> #define ERROR 0 #define OK 1 /*包含数据结构的预定义常量和类型P10 */ typedef int Status; /*文件名大于8位出错*/ /*定义线性表内的元素类型为整数类型*/ typedef int ElemType; /*线性表的动态分配顺序存储结构*/ #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef struct { ElemType* elem; int length; int listsize; }SqList; /*函数申明*/ Status InitList_Sq(SqList* L); /* 算法2.3 */ void Out_List(SqList L); /*补充,输出打印线性表*/ Status ListInsert_Sq(SqList* pL, int i, ElemType e); /* 算法2.4 */ Status ListDelete_Sq(SqList* L, int i, ElemType* e); /* 算法2.5 */ int LocateElem_Sq(SqList L, ElemType e, Status(*compare)(ElemType, ElemType)); /* 算法2.6 */ /*主函数*/ int main() { int i, k, loc; /* k ,菜单控制变量*/ ElemType e, x; char ch; SqList L; SqList* p; system("graftabl 936");/*调用MS_DOS中文支持*/ p = &L;/*p指向 L*/ do { printf("\n========实验一:线性表 ==============="); printf("\n 1.建立线性表"); printf("\n 2.插入元素"); printf("\n 3.删除元素"); printf("\n 4.查找元素"); printf("\n 0.结束程序运行"); printf("\n====================================="); printf("\n 请输入您的选择(1,2,3,4,0)\n"); scanf_s("%d", &k); switch (k) { case 1: {loc = InitList_Sq(p); printf("\n请输入线性表元素个数,并依次输入整数类型的元素值"); scanf_s("%d", &loc); for (i = 1; i <= loc; i++) { scanf_s("%d", &e); ListInsert_Sq(p, i, e); /*也可以不处理函数返回值*/ } Out_List(L); }break; case 2: { printf("\n请输入插入位置 及 整数类型的元素值"); scanf_s("%d%d", &loc, &e); ListInsert_Sq(p, loc, e); Out_List(L); }break; case 3: { printf("\n请输入要删除元素的位置:"); scanf_s("%d", &loc); ListDelete_Sq(p, loc, &e); Out_List(L); }break; case 4: { printf("\n请输入要查找的元素值:"); scanf_s("%d", &e); int position = 0; // 初始化查找结果为0(未找到) for (int i = 0; i < L.length; i++) { if (L.elem[i] == e) { // 直接比较元素值 position = i + 1; // 找到元素,记录位序(从1开始) break; } } if (position != 0) { printf("元素 %d 在线性表中的位序为: %d\n", e, position); } else { printf("未找到元素 %d。\n", e); } Out_List(L); // 输出当前线性表的内容 }break; case 0: { }; } } while (k != 0); printf("\n 按回车键,返回…\n"); ch = getchar(); } Status InitList_Sq(SqList* L) { /* 算法2.3 */ /* 构造一个空的线性表L。 */ L->elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType)); if (!L->elem) exit(OVERFLOW); /* 存储分配失败 */ L->length = 0; /* 空表长度为0 */ L->listsize = LIST_INIT_SIZE; /* 初始存储容量 */ return OK; } /* InitList_Sq */ Status ListInsert_Sq(SqList* L, int i, ElemType e) { /* 算法2.4 */ /* 在顺序线性表L的第i个元素之前插入新的元素e, */ /* i的合法值为1≤i≤ListLength_Sq(L)+1 */ ElemType* p, * q; if (i < 1 || i > L->length + 1) return ERROR; /* i值不合法 */ if (L->length >= L->listsize) { /* 当前存储空间已满,增加容量 */ ElemType* newbase = (ElemType*)realloc(L->elem, (L->listsize + LISTINCREMENT) * sizeof(ElemType)); if (!newbase) return ERROR; /* 存储分配失败 */ L->elem = newbase; /* 新基址 */ L->listsize += LISTINCREMENT; /* 增加存储容量 */ } q = &(L->elem[i - 1]); /* q为插入位置 */ for (p = &(L->elem[L->length - 1]); p >= q; --p) *(p + 1) = *p; /* 插入位置及之后的元素右移 */ *q = e; /* 插入e */ ++L->length; /* 表长增1 */ return OK; } /* ListInsert_Sq */ void Out_List(SqList L) { int i; printf("\n当前线性表为:"); for (i = 0; i < L.length; i++) printf("%10d", L.elem[i]); } Status ListDelete_Sq(SqList* L, int i, ElemType* e) { /* 算法2.5 */ /* 在顺序线性表L中删除第i个元素,并用e返回其值。 */ /* i的合法值为1≤i≤ListLength_Sq(L)。 */ ElemType* p, * q; if (i<1 || i>L->length) return ERROR; /* i值不合法 */ p = &(L->elem[i - 1]); /* p为被删除元素的位置 */ *e = *p; /* 被删除元素的值赋给e */ q = L->elem + L->length - 1; /* 表尾元素的位置 */ for (++p; p <= q; ++p) *(p - 1) = *p; /* 被删除元素之后的元素左移 */ --L->length; /* 表长减1 */ return OK; } /* ListDelete_Sq */ int LocateElem_Sq(SqList L, ElemType e, Status(*compare)(ElemType, ElemType)) { /* 算法2.6 */ /* 在顺序线性表L中查找第1个值与e满足compare()的元素的位序。 */ /* 若找到,则返回其在L中的位序,否则返回0。 */ int i; ElemType* p; i = 1; /* i的初值为第1个元素的位序 */ p = L.elem; /* p的初值为第1个元素的存储位置 */ while (i <= L.length && !(*compare)(*p++, e)) ++i; if (i <= L.length) return i; else return 0; } /* LocateElem_Sq */ 根据实验内容和完整代码,在vs中,将代码中的整数类型改为字符类型,写出改为字符类型之后的完整代码(用c语言)
06-02
实验内容:请编制c语言程序,利用顺序存储方式实现下列功能:根据键盘输入数据建立一个线性表,并输出该线性表;然后根据屏幕菜单的选择,可以进行数据的插入、删除、查找,并在插入或删除数据后,再输出线性表;最后在屏幕菜单中选择结束按钮,即可结束程序的运行。完整代码:#include <stdio.h> #include<iostream> #define ERROR 0 #define OK 1 /*包含数据结构的预定义常量和类型P10 */ typedef int Status; /*文件名大于8位出错*/ /*定义线性表内的元素类型为整数类型*/ typedef int ElemType; /*线性表的动态分配顺序存储结构*/ #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef struct { ElemType* elem; int length; int listsize; }SqList; /*函数申明*/ Status InitList_Sq(SqList* L); /* 算法2.3 */ void Out_List(SqList L); /*补充,输出打印线性表*/ Status ListInsert_Sq(SqList* pL, int i, ElemType e); /* 算法2.4 */ Status ListDelete_Sq(SqList* L, int i, ElemType* e); /* 算法2.5 */ int LocateElem_Sq(SqList L, ElemType e, Status(*compare)(ElemType, ElemType)); /* 算法2.6 */ /*主函数*/ int main() { int i, k, loc; /* k ,菜单控制变量*/ ElemType e, x; char ch; SqList L; SqList* p; system("graftabl 936");/*调用MS_DOS中文支持*/ p = &L;/*p指向 L*/ do { printf("\n========实验一:线性表 ==============="); printf("\n 1.建立线性表"); printf("\n 2.插入元素"); printf("\n 3.删除元素"); printf("\n 4.查找元素"); printf("\n 0.结束程序运行"); printf("\n====================================="); printf("\n 请输入您的选择(1,2,3,4,0)\n"); scanf_s("%d", &k); switch (k) { case 1: {loc = InitList_Sq(p); printf("\n请输入线性表元素个数,并依次输入整数类型的元素值"); scanf_s("%d", &loc); for (i = 1; i <= loc; i++) { scanf_s("%d", &e); ListInsert_Sq(p, i, e); /*也可以不处理函数返回值*/ } Out_List(L); }break; case 2: { printf("\n请输入插入位置 及 整数类型的元素值"); scanf_s("%d%d", &loc, &e); ListInsert_Sq(p, loc, e); Out_List(L); }break; case 3: { printf("\n请输入要删除元素的位置:"); scanf_s("%d", &loc); ListDelete_Sq(p, loc, &e); Out_List(L); }break; case 4: { printf("\n请输入要查找的元素值:"); scanf_s("%d", &e); int position = 0; // 初始化查找结果为0(未找到) for (int i = 0; i < L.length; i++) { if (L.elem[i] == e) { // 直接比较元素值 position = i + 1; // 找到元素,记录位序(从1开始) break; } } if (position != 0) { printf("元素 %d 在线性表中的位序为: %d\n", e, position); } else { printf("未找到元素 %d。\n", e); } Out_List(L); // 输出当前线性表的内容 }break; case 0: { }; } } while (k != 0); printf("\n 按回车键,返回…\n"); ch = getchar(); } Status InitList_Sq(SqList* L) { /* 算法2.3 */ /* 构造一个空的线性表L。 */ L->elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType)); if (!L->elem) exit(OVERFLOW); /* 存储分配失败 */ L->length = 0; /* 空表长度为0 */ L->listsize = LIST_INIT_SIZE; /* 初始存储容量 */ return OK; } /* InitList_Sq */ Status ListInsert_Sq(SqList* L, int i, ElemType e) { /* 算法2.4 */ /* 在顺序线性表L的第i个元素之前插入新的元素e, */ /* i的合法值为1≤i≤ListLength_Sq(L)+1 */ ElemType* p, * q; if (i < 1 || i > L->length + 1) return ERROR; /* i值不合法 */ if (L->length >= L->listsize) { /* 当前存储空间已满,增加容量 */ ElemType* newbase = (ElemType*)realloc(L->elem, (L->listsize + LISTINCREMENT) * sizeof(ElemType)); if (!newbase) return ERROR; /* 存储分配失败 */ L->elem = newbase; /* 新基址 */ L->listsize += LISTINCREMENT; /* 增加存储容量 */ } q = &(L->elem[i - 1]); /* q为插入位置 */ for (p = &(L->elem[L->length - 1]); p >= q; --p) *(p + 1) = *p; /* 插入位置及之后的元素右移 */ *q = e; /* 插入e */ ++L->length; /* 表长增1 */ return OK; } /* ListInsert_Sq */ void Out_List(SqList L) { int i; printf("\n当前线性表为:"); for (i = 0; i < L.length; i++) printf("%10d", L.elem[i]); } Status ListDelete_Sq(SqList* L, int i, ElemType* e) { /* 算法2.5 */ /* 在顺序线性表L中删除第i个元素,并用e返回其值。 */ /* i的合法值为1≤i≤ListLength_Sq(L)。 */ ElemType* p, * q; if (i<1 || i>L->length) return ERROR; /* i值不合法 */ p = &(L->elem[i - 1]); /* p为被删除元素的位置 */ *e = *p; /* 被删除元素的值赋给e */ q = L->elem + L->length - 1; /* 表尾元素的位置 */ for (++p; p <= q; ++p) *(p - 1) = *p; /* 被删除元素之后的元素左移 */ --L->length; /* 表长减1 */ return OK; } /* ListDelete_Sq */ int LocateElem_Sq(SqList L, ElemType e, Status(*compare)(ElemType, ElemType)) { /* 算法2.6 */ /* 在顺序线性表L中查找第1个值与e满足compare()的元素的位序。 */ /* 若找到,则返回其在L中的位序,否则返回0。 */ int i; ElemType* p; i = 1; /* i的初值为第1个元素的位序 */ p = L.elem; /* p的初值为第1个元素的存储位置 */ while (i <= L.length && !(*compare)(*p++, e)) ++i; if (i <= L.length) return i; else return 0; } /* LocateElem_Sq */ 将完整代码中的整数类型改为字符类型,写一份与完整代码相似的新代码
最新发布
06-02
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值