当前位置:首页 » 编程语言 » c语言basename
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言basename

发布时间: 2022-08-25 00:51:37

㈠ 数据结构实验(用c语言写) 栈的基本操作

//顺序栈
#include<stdio.h>

#include<stdlib.h>

#include<malloc.h>

#define STACK_INIT_SIZE 100;

#define STACKINCREMENT 10;

typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;

typedef int ElemType;

int InitStack(SqStack &S) //为栈S分配存储空间,并置S为空栈
{
int size = STACK_INIT_SIZE;
S.base=(int *)malloc(size*sizeof(ElemType));
if(!S.base)
return 0;
S.top=S.base; //置栈S为空栈
S.stacksize=STACK_INIT_SIZE;
return 1;
}

int GetTop(SqStack S,int &e) //若栈不空,则用e返回S的栈顶元素
{
if(S.top==S.base) return 0;
e=*(S.top-1);
return 1;

}

int Push(SqStack &S, int e) /*进栈函数,将e插入栈S中,并使之成为栈顶元素*/
{ if(S.top-S.base>=S.stacksize) /*栈满,追加存储空间*/
{
int stackinvrement = STACKINCREMENT;

S.base=(ElemType *) realloc(S.base,(S.stacksize+stackinvrement)*sizeof(ElemType));
if(!S.base)
return 0; /*存储分配失败*/
S.stacksize+=STACKINCREMENT;
}

*S.top++=e;
return 1;
}

int Pop(SqStack &S,int &e)/*出栈函数,若栈S不空,则删除S的栈顶元素,用e返回其值*/

{ if(S.top==S.base) return 0;

e=*--S.top;
return 1;
}

void OutputStack(SqStack &S)

{int *q;
q=S.top-1;
for(int i=0;i<S.top-S.base;i++)
{

printf("%3d ",*q);q--;}

}

void main()

{

int a,b,c ;
char m;

SqStack s;

InitStack(s);
printf("请输入要进栈的元素个数是:");

scanf("%d",&a);

printf("\n请输入要进栈的%d个元素:",a);

for(b=0;b<a;b++) {
scanf("%d",&c);
Push(s,c); }
do { printf("\n");
printf("*********** 1.输出栈的元素**********\n");
printf("*********** 2.取栈顶元素************\n");
printf("*********** 3.删除栈顶元素**********\n");
printf("*********** 4.退出程序**********\n");
printf("\n请选择一个字符:");
getchar();
scanf("%c",&m);
switch(m) {
case '1': printf("\n输出的栈为:");
OutputStack(s);
break;

case '2': GetTop(s,c);
printf("\n栈顶元素为:%d",c);
printf("\n输出的栈为:");
OutputStack(s);
break;
case '3': Pop(s,c);
printf("\n删除的栈顶元素:%d",c);
printf("\n输出的栈为:");
OutputStack(s);
printf("\n");
break;
case '4':break;
default: printf("输入的数字有错,请重新选择!\n"); break;

}

}while(m!='4');

}
//链栈

#include<stdio.h>
#include<stdlib.h>
typedef struct SNode
{
int data;
struct SNode *next;
}SNode,*LinkStack;
LinkStack top;
LinkStack PushStack(LinkStack top,int x) //入栈
{
LinkStack s;
s=(LinkStack)malloc(sizeof(SNode));
s->data=x;
s->next=top;
top=s;
return top;
}
LinkStack PopStack(LinkStack top) //退栈
{
LinkStack p;
if(top!=NULL)
{
p=top;
top=top->next;
free(p);
printf("退栈已完成\n");
return top;
}
else printf("栈是空的,无法退栈!\n"); return 0;
}
int GetStackTop(LinkStack top) //取栈顶元素
{
return top->data;

}
bool IsEmpty()//bool取值false和true,是0和1的区别,bool只有一个字节,BOOL为int型,bool为布尔型

{
return top==NULL ? true:false;
}
void Print()
{
SNode *p;
p=top;
if(IsEmpty())
{
printf("The stack is empty!\n");
return;
}
while(p)
{
printf("%d ", p->data);
p=p->next;
}
printf("\n");
}

void main()
{

int x,a,b;
char m;
do { printf("\n");
printf("###############链栈的基本操作##################\n");
printf("××××××××1.置空栈××××××××××\n");
printf("××××××××2.进栈×××××××××××\n");
printf("××××××××3.退栈×××××××××××\n");
printf("××××××××4.取栈顶元素××××××××\n");
printf("××××××××5.退出程序×××××××××\n");
printf("##############################################\n");
printf("\n请选择一个字符:");
scanf("%c",&m);
switch(m){
case '1':
top=NULL;
printf("\n栈已置空!");
break;
case '2':
printf("\n请输入要进栈的元素个数是:");
scanf("%d",&a);
printf("\n请输入要进栈的%d个元素:",a);
for(b=0;b<a;b++) {
scanf("%d",&x);
top=PushStack(top,x); }
printf("进栈已完成!\n");
printf("\n输出栈为:");
Print();
break;
case '3':
printf("\n操作之前的输出栈为:");
Print();
top=PopStack(top);
printf("\n操作过后的输出栈为:");
Print();
break;
case '4':
printf("\n输出栈为:");
Print();
if(top!=NULL)
printf("\n栈顶元素是:%d\n",GetStackTop(top));
else
printf("\n栈是空的,没有元素!");
break;
case '5':break;
default:
printf("\n输入的字符不对,请重新输入!");
break;

}
getchar();
}while(m!='5');

}

㈡ 用C语言批量更改文件名

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dirent.h>
#include <string.h>
#include <iconv.h>
#include <errno.h>
/*int to_iconv(char *in,size_t in_bytes,char *out,size_t out_bytes,
const char *from,const char *to)*/
int to_iconv(char *in,char *out,size_t out_bytes,const char *from,const char *to)
{
iconv_t cd;
size_t in_bytes=strlen(in);
//size_t out_bytes;
if((cd=iconv_open(to,from)) == (iconv_t)-1)
{
perror("iconv_open");
return -1;
}
if(iconv(cd,&in,&in_bytes,&out,&out_bytes) == -1)
{
perror("iconv");
return -1;
}
iconv_close(cd);
return 0;
}
void read_and_iconv(char *path,const char *from,const char *to)
{
DIR *dirp;
struct dirent *dir;
struct stat buf;
char temp[512]; //用于保存转换后的文件名称
if((dirp=opendir(path)) == NULL) //读取文件夹
{
perror("opendir");
return;
}
chdir(path); //进入到该文件夹内部
while(dir=readdir(dirp)) //读取该文件夹下所有文件
{
if((strcmp(dir->d_name,".") == 0) || (strcmp(dir->d_name,"..") == 0))
//过滤掉.以及..文件夹,不然会死循环的
continue;
bzero(temp,sizeof(temp));
to_iconv(dir->d_name,temp,sizeof(temp),from,to); //进行编码转换
rename(dir->d_name,temp); //进行重命名
printf("rename %s to %s\n",dir->d_name,temp);
stat(temp,&buf);
if(S_ISDIR(buf.st_mode)) //判断当前读取的文件是否为文件夹
{
read_and_iconv(temp,from,to); //如果是则递归处理
chdir(".."); //处理完成后一定要记得返回上一层目录哦,不然其它文件就无法处理了
}
}
closedir(dirp);
}
int main(int argc,char **argv)
{
read_and_iconv(argv[1],argv[2],argv[3]);
/*第一个参数是要转换的文件夹所在的文件夹名称
*第二个参数是文件名称所使用的编码(这里为GBK)
*第三个参数是要转换成何种编码(这里为UTF-8)
*/
return 0;
}

㈢ c语言中char basename="sim",filename是什么意思

char basename="sim"
这种定义方法是错误的,字符类型的变量不能被赋字符串,应该是 char *basename="sim";

㈣ define的用法

有三种用法,例如替代多行的代码、条件编译,还有典型的宏定义,具体如下:

1、define最重要的用法是条件编译

#ifdef WINDOWS

......

......

#endif

#ifdef LINUX

......

......

#endif

可以在编译的时候通过#define设置编译环境

2、典型的使用方法

使用宏定义我们可以自己根据自己的习惯来定义甚至改变C语言的语法习惯,例如:

#defineBEGIN {

#defineEND }

int main()BEGIN

printf ("DEFINE---- ");

定义一个循环

#define LOOP for(;;)

重新定义数据类型

#define IT int

3、define可以替代多行的代码,在每一个换行的时候加上一个""

#define MAX(X,Y) do {

语句1;

语句2;

/* 注释的写法 */

} while(0) /* (no trailing ; ) */

(4)c语言basename扩展阅读:

参数

#define GPEBLT_FUNCNAME(basename) (SCODE (GPE::*)(struct GPEBltParms *))&GPE::##basename

在#define中,标准只定义了#和##两种操作。#用来把参数转换成字符串,##则用来连接前后两个参数,把它们变成一个字符串。

#include<stdio.h>

#definepaster(n)printf("token"#n"=%d ",token##n)

intmain(void)

{

inttoken9=10;

paster(9);

return0;

}

输出为:token 9 = 10

㈤ C语言中定义的__FILE__使用,如何只出现该文件名,而不显示路径

可以用宏定义来实现去除文件名中的路径名。

因为windows和linux下,文件名中的路径分隔符号不同,windows中是"/",而linux中是"/",所以,采用的宏不同:

#include<string.h>//strrchr()函数所需头文件
windows:
#definefilename(x)strrchr(x,'\')?strrchr(x,'\')+1:x
linux:
#definefilename(x)strrchr(x,'/')?strrchr(x,'/')+1:x

调用:
printf("filename:%s ",filename(__FILE__));

相关函数说明:

函数原型:char *strrchr(const char *s, int c);

函数功能:The strrchr() function returns a pointer to the last occurrence of the character 【c】 in the string 【s】.函数返回一个指向最后一次出现在字符串s中的字符c的位置指针,如果c不在s中,返回NULL。

PS:linux中提供了相应的函数:basename(s),用来获取不带路径的文件名。

㈥ C语言中的typedef是什么意思啊

typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。

在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。

(6)c语言basename扩展阅读:

C语言允许用户使用 typedef 关键字来定义自己习惯的数据类型名称,来替代系统默认的基本类型名称、数组类型名称、指针类型名称与用户自定义的结构型名称、共用型名称、枚举型名称等。

一旦用户在程序中定义了自己的数据类型名称,就可以在该程序中用自己的数据类型名称来定义变量的类型、数组的类型、指针变量的类型与函数的类型等。

例如,C 语言在 C99 之前并未提供布尔类型,但可以使用 typedef 关键字来定义一个简单的布尔类型。

参考资料来源:网络—typedef

㈦ 用c语言或者python将文件中特定字符串后面的数字相加

代码应该不难吧。既然用爬虫爬下来了,为什么爬取数据的时候没做处理呢。

之前用过Scrapy爬虫框架,挺好用的,你可研究下。

代码:

#!coding=utf-8
importos
importre
importrandom

#获取当前目录文件列表
defgetNum():
flist=os.listdir(os.getcwd())
#遍历文件
forfinflist:
iff!=os.path.basename(__file__):
withopen(f,'r')asfn:
text=fn.read()
num=re.findall(r'评论人数:(d+)',text)
printf,num


#文件写入测试
deftest():
foriinrange(10):
withopen('%d.txt'%i,'w')asf:
f.write('文件:%d 每家餐馆是一个文件,统计评论数,求读取每个文件中“评论人数:%d”中的60并相加,求具体程序,60是个例子'%(i,random.randint(1,200)))
printu'文件写入完毕'

if__name__=='__main__':
#test()
getNum()

代码基本符合要求,但健壮性有些差。你自己用的时候修改吧

测试结果:

C:Python27python.exeD:/11/c.py
文件写入完毕
0.txt['131']
1.txt['181']
2.txt['56']
3.txt['119']
4.txt['18']
5.txt['103']
6.txt['88']
7.txt['115']
8.txt['160']
9.txt['136']

Processfinishedwithexitcode0

㈧ c语言如何获取用户通过键盘输入的文件目录中的文件名和文件路径,ballball大佬帮帮我🙏求代码

int main()
{
string s = "c:\\abc\\def\\text.txt";
int xie_index = s.find_last_of('\\'); // 路径中最后一个\的位置
string file_dirname = s.substr(0, xie_index + 1);
string file_basename = s.substr(xie_index + 1, s.size());
cout << file_dirname << endl << file_basename << endl;
}

㈨ 有个梅森旋转素数算法(MT199937)c语言代码相关的问题,希望大神们能给我讲解一下,感激不尽呀。

这个是宏定义,#define
#define GPEBLT_FUNCNAME(basename) (SCODE (GPE::*)(struct GPEBltParms *))&GPE::##basename
在#define中,标准只定义了#和##两种操作。#用来把参数转换成字符串,##则用来连接前后两个参数,把它们变成一个字符串。
#include<stdio.h>
#define paster(n) printf("token"#n"=%d\n",token##n)
int main(int argc,char *argv[])
{
int token9=10;
paster(9);
return 0;
}
输出为:token 9 = 10
详细请看网络:#define

㈩ C语言中typedef struct什么意思

类型定义。

它就和define相对应,define是把一个自己起的名字的常量定义为代替它的另一个常量来同。

typedef是把一个自己起的名字的类型用已经有的类型代替使用,如:typedef int Type1;之后如果有Type1 i ;系统则理解为int i;。

在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。

输出为:token 9 = 10

详见网络typedef(相似)。