導航:首頁 > 凈水問答 > c瀏覽文件類型過濾

c瀏覽文件類型過濾

發布時間:2020-12-21 18:57:14

⑴ 打開帶有注釋的C語言源程序文件,顯示過濾掉注釋後文件內容.

大體思路吧,做一個標記,遇到/*做一個標記(因為C語言只有/**/注釋,如果是C++的話//也是注釋),此標記為真時不向另一個文件中寫入,遇到*/時標記為假,則斷續寫入就OK了

⑵ 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語言文件將一個.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;
}

稍微測試了下,應該是可行的 主要在對'/'和'*'的判斷這部分做了修改 試試吧

⑷ eclipse如何過濾只顯示.c和.h文件

無論什麼樣的程序開發過程中,出現錯誤都是不可避免的,一般情況下,語法錯誤會被內開發環境檢測到,容並能及時的提示我們錯誤的位置以及修改的方法,但是邏輯錯誤就不是那麼容易被發現了,通常邏輯錯誤的定位和分析是一件非常困難的事情。

所以在學習Android過程中,繼學習它的程序結構,寫了HelloWorld和一些簡單的界面布局程序之後,我選擇研究一下它的調試工具。
LogCat就是其中一個。LogCat是用來獲取系統日誌信息的工具,它可以捕獲的信息包括Dalvik虛擬機產生的信息,進程信
息,ActivityManager信息,PackagerManager信息,Android運行時信息和應用程序信息等等。

我們可以在打開Eclipse之後,選擇Window –> Show View ->Other菜單,然後在Android->LogCat中選擇LogCat,這樣LogCat便會在Eclipse的下方區域出現了。

⑸ 將一個.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語言如何過濾去非16進制的字元

||#include<stdio.h>
void main()
{
char str[100];
int t,i=0;
printf("請輸入一個字元串\n");
gets(str);
for(t=0;str[t]!版='\0';t++)
if(('A'<=str[t]&&str[t]<='F')||權('a'<=str[t]&&str[t]<='f')||('0'<=str[t]&&str[t]<='9'))
str[i++]=str[t];
str[i]=0;
printf("%s\n",str);
}

⑺ C語言設計函數將文件過濾注釋

用正則表達式

⑻ c語言過濾注釋問題

#include<stdio.h>

intmain()
{
FILE*fp1,*fp2;
charch1,ch2,str[100];
if((fp1=fopen("test1.c","r"))==NULL)
{
("Can'topenthefile!");
exit(0);
}
else
{
if((fp2=fopen("test2.c","w"))==NULL)
{
printf("Can'topenthefile!");
exit(0);
}
else
{
/*兩個文件都正常打開*/
ch1=fgetc(fp1);
while(!feof(fp1))
{
/***************mychangebeginshere******************/
if(ch1=='/')
{
/*將當前字元賦給ch2,ch1繼續讀取下一個字元來做判斷*/
ch2=ch1;
ch1=fgetc(fp1);

/*繼續判斷ch1所讀取到的字元*/
if(('/'==ch1))
{
/*已經到文件尾了*/
if(feof(fp1))
{
break;
}

/*注釋格式為//,將該行讀取出來,讓文件指針偏移到注釋行的下一個字元*/
fseek(fp1,-2,SEEK_CUR);
fgets(str,sizeof(str),fp1);
ch1=fgetc(fp1);
}
elseif('*'==ch1)
{
/*已經到文件尾了*/
if(feof(fp1))
{
break;
}

/***注釋格式為/**/,循環讀取直至注釋結束符*/****/
do
{
ch2=ch1;
ch1=fgetc(fp1);
}while((('*'!=ch2)||('/')!=ch1)&&(!feof(fp1)));

/*注釋部分已經讀取完畢,ch1繼續讀取其下一個非注釋字元,並寫入fp2*/
ch1=fgetc(fp1);
fputc(ch1,fp2);
}
else
{
/*若不是注釋符,則將原先讀取到的字元寫入文件中*/
fputc(ch2,fp2);
}
}
else
{
/*若沒遇到,正常復制,繼續讀取下一個字元*/
fputc(ch1,fp2);
ch1=fgetc(fp1);
}
/****************mychangeendshere*******************/
}
}
}

fclose(fp1);
fclose(fp2);

return0;
}

小夥子 自己測試一下吧 應該是可行的

⑼ c語言程序填空:將html文件中的htm標記過濾掉

11 "w"
12 fgetc(fin)
13 sc
14 fgetc(fin) == '\n'
15 fclose(fin)

⑽ H3C-F100C防火牆網頁過濾功能

還要開啟aspf,並應用於出介面,具體操作如下:

防火牆管理----aspf----創建一個aspf策略1,勾選http,如下圖,應用:


再訪問禁了的網站就打不開了。

閱讀全文

與c瀏覽文件類型過濾相關的資料

熱點內容
大孔樹脂吸附處理廢水流程 瀏覽:266
安吉爾凈水器好不好多少錢1台 瀏覽:678
賽歐2空調濾芯怎麼裝 瀏覽:512
哪些液體普通蒸餾 瀏覽:192
汽車空氣濾芯真假如何鑒別 瀏覽:97
什麼叫ro反滲透濾芯 瀏覽:401
浙江新雅樹脂 瀏覽:922
九州凈水機多少錢一台 瀏覽:3
萊克吉米凈化器濾網怎麼清洗 瀏覽:35
69元凈水機多少錢 瀏覽:438
弱鹼性離子交換樹脂 瀏覽:496
蒸餾釜的功率 瀏覽:22
廣東超濾凈水器貼牌 瀏覽:121
污水井怎麼打開專用工具 瀏覽:603
凈水器中水泵接頭怎麼拆 瀏覽:501
污水排放申請報告怎麼寫 瀏覽:84
珍奧尚飲水機的廠家在什麼地方 瀏覽:644
熱水器水垢清除材料 瀏覽:984
酚醛樹脂生產企業 瀏覽:224
小飯店過濾池怎麼做 瀏覽:798