① 将一个.c文件1复制到另一个文件2中,要求过滤掉文件1中的所有注释
刚写的,测试过了,你试下看!
private void button10_Click(object sender, EventArgs e)
{
string text = "";
//读出流,把值一行行的读出来
using (StreamReader reader = new StreamReader("D:\\a.c"))
{
string line = reader.ReadLine();
while (line != null)
{
//查找到你写注释符号的地方
int count = line.IndexOf("//");
string value = "";
if (count >= 0)
{
//把注释符号后面的都切掉
value = line.Substring(0, count);
}
else
//没有的话就保存原值
value = line;
text += value + "\r\n";
line = reader.ReadLine();
}
}
//从写入流将值写入B中去
using (StreamWriter writer = new StreamWriter("D:\\b.c"))
{
writer.Write(text);
writer.Flush();
writer.Close();
}
}
② C语言将TXT文件中的注释过滤掉,求大神帮忙修改~分不是问题
我先mark一下,周末写。
不过理论上不应该是你说的那样
遇到/*而没有后面的*/,则将/*后面的消除---------------这个是不对的
删除注释,前提应该是你的cpp可以编译,不可能出现这种有/*而没有*/的情况,如果简单粗暴地将/*之后的全部删除,那修改后的文件就不知道错到哪里去了
/************************************************************************
*本程序需要以dos命令行形式打开,支持txt格式
*file1和file2以绝对路径表示,用法为del.exeoldfile.txtnewfile.txt,例如:
*D:????>DelComments.exee:BPALTask.txte:NewFile.txt
/************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
#defineMAX_BUFF_LEN1024
#defineMAX_FNAME_LEN256
/*************************************************************************/
//删除文件中的注释,这个文件本身应该没有错误,尤其是引号要匹配,"/*"和"*/"要匹配
//算法大体上应该如下:
//步骤1:读取一行,查找"//",若找到,则删除这一行中"//"后所有的部分
//步骤2:读取一行,查找"/*",若找到,记录pos1,删除pos1到本行末尾,重新读取一行,
//查找"*/",若找到,记录pos2,删除本行0到pos2之间的部分
//重复步骤1和2
//需要考虑的特殊情况有:
//处于双引号中,如"/","*","//"不计入考虑范围
//处于单引号中,如'/','*','//'不计入考虑范围
//"//"与"/"的嵌套关系
/************************************************************************/
voidDelComments(FILE*pFile,FILE*tempFile)
{
charbuff[MAX_BUFF_LEN]={0};
char*pCur=NULL;//当前字符
char*pNext=NULL;//下一字符
char*sqStart=NULL;//单引号起始位置
char*dqStart=NULL;//双引号起始位置
char*scStart=NULL;//单行注释起始位置
char*dcStart=NULL;//多行注释起始位置
unsignedcharlen=0;
while(NULL!=fgets(buff,MAX_BUFF_LEN,pFile))
{
pCur=buff;
while(' '!=*pCur)
{
switch(*pCur)
{
case'/':
if(sqStart||dqStart||scStart||dcStart)
{//忽略字符、字符串以及注释中的斜杠
pCur++;
}
else
{
pNext=pCur+sizeof(char);
if('/'==*pNext)
{//单行注释
dcStart=pCur;
pCur=pNext+sizeof(char);
}
elseif('*'==*pNext)
{//多行注释
scStart=pCur;
pCur=pNext+sizeof(char);
}
else
{//除号
pCur++;
}
}
break;
case'*':
if(sqStart||dqStart||dcStart||(NULL==scStart))
{//忽略字符、字符串以及注释中的星号,忽略乘号
pCur++;
}
else
{
pNext=pCur+sizeof(char);
if('/'!=*pNext)
{//多行注释中间的星号,不处理
pCur++;
}
else
{
memset(scStart,'',pNext+sizeof(char)-scStart);
scStart=NULL;
}
}
break;
case'"':
if(sqStart||scStart||dcStart)
{//忽略字符以及注释中的双引号
pCur++;
}
else
{
if(dqStart)
{//双引号匹配成功
dqStart=NULL;
pCur++;
}
else
{
dqStart=pCur;
pCur++;
}
}
break;
case''':
if(dqStart||scStart||dcStart)
{
pCur++;
}
else
{
if(sqStart)
{
len=pCur-sqStart;
if((2*sizeof(char)==len)&&('\'==*(pCur-1)))
{//忽略字符中的单引号
pCur++;
}
else
{
pCur++;
sqStart=NULL;
}
}
else
{
sqStart=pCur;
pCur++;
}
}
break;
default:
pCur++;
break;
}
}
//读到换行符后,进行相应操作
if(dcStart)
{
len=((*(pCur-sizeof(char))==' ')?(pCur-sizeof(char)):pCur)-dcStart;
memset(dcStart,'',len);
dcStart=NULL;
}
if(sqStart)
{
sqStart=buff;
}
if(dqStart)
{
dqStart=buff;
}
if(scStart)
{
memset(scStart,'',pCur-scStart);
scStart=buff;
}
fputs(buff,tempFile);
}
}
intmain(intargc,char*argv[])
{
FILE*pFile=NULL;
FILE*newFile=NULL;
if(argc<3)
{
fprintf(stderr,"usage:%s[OLD_FILE_NAME][NEW_FILE_NAME] ",argv[0]);
exit(1);
}
if(NULL==(pFile=fopen(argv[1],"r+")))
{
fprintf(stderr,"openfilefailed ");
exit(2);
}
if(NULL==(newFile=fopen(argv[2],"w+")))
{
fprintf(stderr,"createnewFilefailed ");
exit(3);
}
DelComments(pFile,newFile);
fclose(pFile);
fclose(newFile);
return0;
}
③ C语言怎么实现文件中部分数据的删除
删除文件部分内容的大概步骤:新建一个临时文件,把原文件内容向临时文件里拷贝,遇到要删除的内容就跳过。结束后关闭文件,用remove("原文件名");把原文件删除,用rename("临时文件名","原文件名");把临时文件名改为原文件名。
例如在原文件123.txt中删除以2和以4编号开头的行,可用以下代码实现:
#include "stdio.h"
#include "stdlib.h"
int main(void){
FILE *fin,*ftp;
char a[1000];
fin=fopen("123.txt","r");//读打开原文件123.txt
ftp=fopen("tmp.txt","w");//写打开临时文件tmp.txt
if(fin==NULL || ftp==NULL){
printf("Open the file failure...\n");
exit(0);
}
while(fgets(a,1000,fin))//从原文件读取一行
if(a[0]!='2' && a[0]!='4')//检验是要删除的行吗?
fputs(a,ftp);//不是则将这一行写入临时文件tmp.txt
fclose(fin);
fclose(ftp);
remove("123.txt");//删除原文件
rename("tmp.txt","123.txt");//将临时文件名改为原文件名
return 0;
}
④ c语言如何实现跳过指定字符串再输出文本文件中的内容
提供一个思路
ASCII表示的符号范围。
你可以判断字符串,是否为ASCII码,是忽略。
不是,输出。
上面的变量还应该定义一些操作字符串的指针。
相关有关编码信息参考以下babybubble网络知道:
C/C++支持的是ASCII,不过汉字编码中,GB2312与ASCII是兼容的,所以可以在C中获得汉字的GB2312编码
GB2312是两个字节的,第一字节是高八位,第二字节是低八位,比如下面的程序:
#include<stdio.h>
#include<string.h>
int
main()
{
char
a[5];
strcpy(a,"啊");
printf("%XH
%XH\n",(unsigned
char)a[0],(unsigned
char)a[1]);
return
0;
}
a[0]是“啊”字的高八位,a[1]是低八位,程序运行结果是a[0]=B0
a[1]=A1,用16进制表示的,所以“啊”字的GB2312编码是B0A1了~
输出时要强制转换成unsigned
char,不然就变成负数了,因为编码是以8位的无符号整数为单位的
当然也可以转成10进制啦,比如
int
b;
b=(unsigned
char)a[0]*256+(unsigned
char)a[1];
b即为汉字的10进制GB2312编码了
⑤ C语言如何过滤一篇文本空格字符
#include <iostream>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
return 0;
}
⑥ c语言文件将一个.c文件1复制到另一个文件2中,要求过滤掉文件1中的注释。求解。
#include<stdio.h>
#include<stdlib.h>
voidFilechuzhushi(char*sourceFileName,char*destFileName)
{
charch1,ch2,chTemp,s[1000];
FILE*sourcefPtr,*destfPtr;
if((sourcefPtr=fopen(sourceFileName,"r"))==NULL)
("can'topenthesourcefile ");
elseif((destfPtr=fopen(destFileName,"w"))==NULL)
printf("can'topenthedestfile ");
else{
ch1=fgetc(sourcefPtr);//从源文件读取一个字符
while(!feof(sourcefPtr))
{//逐字符复制
//changebegin----------------------------
if('/'==ch1)
{
ch2=ch1;
ch1=fgetc(sourcefPtr);
if('/'==ch1||'*'==ch1)
{
fseek(sourcefPtr,-2,SEEK_CUR);
fgets(s,sizeof(s),sourcefPtr);
ch1=fgetc(sourcefPtr);
puts(s);//打印注释,以便调试
}
else
{
fputc(ch2,destfPtr);
}
}
else
{
fputc(ch1,destfPtr);//将字符写入目标文件
ch1=fgetc(sourcefPtr);
}
//changeend------------------------------
}
fclose(sourcefPtr);
fclose(destfPtr);
}
}
intmain()
{
Filechuzhushi("1.c","2.c");
system("pause");
return0;
}
稍微测试了下,应该是可行的 主要在对'/'和'*'的判断这部分做了修改 试试吧
⑦ C语言如何删除文件内容
1、打开Sublime Text软件,新建一个C语言文件,然后导入C语言库
⑧ C语言设计函数将文件过滤注释
用正则表达式
⑨ c语言中如何对文件的部分内容删除
1、建立一个.c或者.cpp文件,还要建立一个.txt文件进行操作处理,并且写上c语言的编译预处理,头文件,主函数。