第四次軟工基礎做業

git地址  https://github.com/npcccc1/WordCount
夥伴 徐睿201831061409
夥伴博客  https://www.cnblogs.com/codingbyjusticexu/

 

 

 

 

1、PSP表格

 

 2、代碼實現

  和夥伴選擇了不一樣的語言來完成這項工做(c與c++),因此用了兩個倉庫放不一樣的項目。因爲並不在一個寢室,具體的代碼是每人本身敲的。過後的測試、代碼規範與調整則在商討以後進一步完善。html

int main()                                                      //簡單的主函數先放上
{                                                               
	FILE *fpa;
	FILE *fpb;
	if ((fpa = fopen("D:\\wordCount.txt", "r")) == NULL)
	{
		printf("Failure to open wordCount.txt!\n");
		exit(0);
	}
	if ((fpb = fopen("D:\\Countresult.txt", "w")) == NULL)
	{
		printf("Failure to open wordCount.txt!\n");
		exit(0);
	}
	countchar(fpa,fpb);
	wordcount(fpa,fpb);
	fclose(fpa);
	fclose(fpb);
	return 0;
}

  

  

     void countchar(FILE *a,FILE *b)                    //統計字符函數
	{                                                  //ps:一開始想成了輸出a到z 26個字母的個數...  
		char c;
		int  d=0;
		int  i=0;
		int  p=0;
		int  q=0;
		while(!feof(a))
		{
			c=fgetc(a);
			if(c>=48&&c<=57)
			{
				d++;
			}	
			else if(c>=65&&c<=90)
			{
				i++;
			}
			else if(c>=97&&c<=122)
			{
				p++;
			}
			else 
			{
				q++;
			}		
		}
		rewind(a);
		fprintf(b,"0--9\t%d\nA--Z\t%d\na--z\t%d\nSeparator\t%d\n",d,i,p,q);
	}

  

  

	void wordcount(FILE *a,FILE *b)
	{
		int  i;
		int  q=0;
		char str[N][N];
		while(!feof(a))
		{
			for(i=0;;i++)
			{
				int p=0;
				fgets(str[i],N,a);
				
				if((str[i][p]>=97&&str[i][p]<=122)||(str[i][p]>=65&&str[i][p]<=90))
				
				{
					loop:p++;                        //按理說不該該加goto實在不想再用循環了
					
					while((str[i][p]>=97&&str[i][p]<=122)||(str[i][p]>=65&&str[i][p]<=90))
					{
						p++;                         
					}
					if(p>=4)
					{
					if(str[i][p]>=48&&str[i][p]<=57)
						{
						do
							{
								p++;	
							}
							while(str[i][p]>=48&&str[i][p]<=57);
							q++;
							goto loop;
						}
						q++;
					}
									
				}
				
				fprintf(b,"%d\t",q);				
			}	
		} 

	}

3、代碼規範

  經討論後,規範詳見此連接。對照後看了本身的代碼發現一個小壞習慣以前沒注意的——寫函數時老是空出一個製表符,致使在複雜的循環中「{}」每每由於開頭的這個Tab而向後縮進,顯得前面一大片空白,影響美觀。python

  還有即是變量的取名不大規範,每每是本身爲所欲爲地取。c++

4、代碼複審

  與其說是複審,其實更像在寫中改。開始編譯沒什麼問題仍是很開心的,但打開文件發現沒有打印出任何東西。上一個四則運算也是遇到了這種狀況,上次是由於&&與||有一次打錯,致使循環卡到了一處沒輸出任何算式。git

   這是一開始第一次傳到github中的代碼,循環太多要處理帶數字或其餘符號的字符串是否是單詞,讓腦子有點亂,一開始沒輸出也是這個的緣由。此外也有零零散散的小錯誤,也是要多看幾遍本身就能檢查出來。爲了效率,也是由於用的不一樣的語言不一樣的方法,沒再讓同伴互查。github

5、性能分析

  不知道爲何複製過去vs裏面說fopen可能不安全,編譯不出來測試不出來。安全

6、總結與反思

  對c語言的面向過程深有了感觸,再加上本身沒有細分模塊與函數致使出錯多、效率低下,感受仍是c++封裝及模塊的劃分比c語言簡單。可是結對確實是提供了思路即便咱們交流代碼不大詳細,每每在qq上交流一些問題和進度及本身的思路,能夠明顯感到1+1>2,ide

相關文章
相關標籤/搜索