⑴ 打開帶有注釋的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,如下圖,應用:
再訪問禁了的網站就打不開了。