WordCount 인코딩 및 테스트

30681 단어
1. GitHub
  https://github.com/LiFengONE/WordCount
2. PSP 테이블
PSP2.1
PSP 단계
예상 소요 시간(분)
실제 소요 시간(분)
Planning
계획
   10
 15
· Estimate
· 이 임무는 얼마나 걸릴지 예상
 700
885
Development
개발하다
 180
 600
· Analysis
· 수요 분석(신기술 학습 포함)
30
 60
· Design Spec
· 디자인 문서 생성
 30
 30
· Design Review
· 디자인 재심(동료와 디자인 문서 심사)
 10
 10
· Coding Standard
· 코드 규범(현재 개발에 적합한 규범 제정)
 10
 10
· Design
· 구체적 설계
 30
 60
· Coding
· 세부 코딩
 120
 360
· Code Review
· 코드 재심
 30
 30
· Test
· 테스트(자체 테스트, 코드 수정, 수정 제출)
 60
 60
Reporting
보고
 30
 20
· Test Report
· 테스트 보고서
 30
 20
· Size Measurement
· 작업량 계산
 10
 10
· Postmortem & Process Improvement Plan
· 사후 총결산 및 과정 개선 계획 제출
 30
 20
 
합계
700
1305
3. 문제 풀이의 방향
제목을 얻은 후 먼저 대체적인 수요를 본다.
  
기본 기능
  wc.exe -c file.c//파일 파일을 반환합니다.c의 문자 수
  wc.exe -w file.c//파일 파일을 반환합니다.c의 단어 총수
  wc.exe -l file.c//파일 파일을 반환합니다.c의 총 줄 수
  wc.exe -o outputFile.txt//결과를 지정한 파일 outputFile로 출력합니다.txt
 
확장 기능
  wc.exe -s//디렉토리에서 호환되는 파일 처리
  wc.exe -a file.c//더 복잡한 데이터 반환(코드 행/빈 행/주석 행)
  wc.exe -e stopList.txt//파일 단어 총수를 집계할 때, 이 표의 단어를 통계하지 않음
 
그리고 나서 손을 써서 하면서 찾아보았는데 어떤 문법은 잘 기억하지 못해서 복습을 해야 했다.
4. 프로그램 설계 실현 과정
대상 파일의 각 줄 문자를 읽고 공백과 쉼표로 분할한 다음 절단 후의 수를 반복해서 판단하여 입력한 명령에 따라 텍스트에 쓰기
5. 코드 설명
  
  1 #include 
  2 #include 
  3 #include 
  4 using namespace std;
  5 
  6 void main()
  7 {
  8     bool cfuc = false;//                 
  9     bool wfuc = false;
 10     bool lfuc = false;
 11     bool ofuc = false;
 12     char rdfile[20] = { '\0' };    //         
 13     char wrfile[20] = { '\0' };    //       
 14     char a[30];                    //        
 15     cin.get(a, 30);
 16     int i;
 17     for (i = 0; i < 30; i++)
 18     {                            //              rdfile
 19         if (a[i] >= 'a'&&a[i] <= 'z' || a[i] >= 'A'&&a[i] <= 'Z'){
 20             for (int j = 0; j < 20; j++){
 21                 rdfile[j] = a[i + j];
 22                 if (a[i + j] == ' ' || a[i + j] == '
' || a[i + j] == '\0') { i = i + j; break; } 23 } 24 } 25 if (a[i] == '-'){ // 26 if (a[i + 1] == 'c') { 27 cfuc = true; i++; 28 } 29 else if (a[i + 1] == 'w') { 30 wfuc = true; i++; 31 } 32 else if (a[i + 1] == 'l') { 33 lfuc = true; i++; 34 } 35 else if (a[i + 1] == 'o') { 36 if ((cfuc || wfuc || lfuc) == false) { cout << "-o " << endl; break; } 37 else{ 38 ofuc = true; i = i + 3; 39 for (int j = 0; j < 20; j++){// 40 wrfile[j] = a[i + j]; 41 if (a[i + j] == ' ' || a[i + j] == '
' || a[i + j] == '\0') { i = i + j; break; } 42 } 43 } 44 } 45 else{ 46 cout << " " << endl; break; 47 } 48 } 49 } 50 //cout << " :" << rdfile << '
' << " :" << wrfile << '
' << endl;
51 //cout << cfuc << wfuc << lfuc << ofuc << endl; 52 53 FILE *p; 54 p = NULL; 55 errno_t err; 56 if (ofuc){ // 57 ofstream fout(wrfile); 58 if (cfuc){ // 59 err = fopen_s(&p, rdfile, "r"); 60 int c_count = 0; 61 char ch; 62 while (!feof(p)){ 63 ch = fgetc(p); c_count++; 64 } 65 fclose(p); 66 fout << rdfile << "" << c_count << endl; 67 } 68 69 if (wfuc){ // 70 err = fopen_s(&p, rdfile, "r"); 71 int w_count = 0; 72 char ch; 73 bool flag = false; 74 while (!feof(p)){ 75 ch = fgetc(p); 76 //cout << " :" << ch << " " << w_count << endl; 77 if (ch >= 'a'&&ch <= 'z' || ch >= 'A'&&ch <= 'Z' || ch >= '0'&&ch <= '9' || ch == '&' || ch == '-' || ch == '_' || ch == '^') 78 flag = true; 79 else { 80 if (flag) 81 { 82 flag = false; 83 w_count++; 84 } 85 } 86 } 87 fclose(p); 88 fout << rdfile << "" << w_count << endl; 89 } 90 91 if (lfuc){ // 92 err = fopen_s(&p, rdfile, "r"); 93 int l_count = 1; 94 char ch; 95 while (!feof(p)){ 96 ch = fgetc(p); 97 if (ch == '
') l_count++; 98 } 99 fclose(p); 100 fout << rdfile << "" << l_count << endl; 101 } 102 } 103 else { // 104 if (cfuc){ 105 err = fopen_s(&p, rdfile, "r"); 106 int c_count = 0; 107 char ch; 108 while (!feof(p)){ 109 ch = fgetc(p); c_count++; 110 } 111 fclose(p); 112 cout << rdfile << "" << c_count << endl; 113 } 114 115 if (wfuc){ 116 err = fopen_s(&p, rdfile, "r"); 117 int w_count = 0; 118 char ch; 119 bool flag = false; 120 while (!feof(p)){ 121 ch = fgetc(p); 122 //cout << " :" << ch << " " << w_count << endl; 123 if (ch >= 'a'&&ch <= 'z' || ch >= 'A'&&ch <= 'Z' || ch >= '0'&&ch <= '9' || ch == '&' || ch == '-' || ch == '_' || ch == '^') 124 flag = true; 125 else { 126 if (flag) 127 { 128 flag = false; 129 w_count++; 130 } 131 } 132 } 133 fclose(p); 134 cout << rdfile << "" << w_count << endl; 135 } 136 137 if (lfuc){ 138 err = fopen_s(&p, rdfile, "r"); 139 int l_count = 1; 140 char ch; 141 while (!feof(p)){ 142 ch = fgetc(p); 143 if (ch == '
') l_count++; 144 } 145 fclose(p); 146 cout << rdfile << "" << l_count << endl; 147 } 148 } 149 system("pause"); 150 }

6. 테스트 디자인
테스트 용례의 디자인은 주로 전면적이고 모든 프로그램이 실행하는 경로를 덮어쓰고 프로그램의 빈틈을 최대한 테스트하여 프로그램의 질을 향상시킬 수 있도록 한다.
코드 중 분기가 가장 많고 가장 복잡하며 처리 상황이 가장 많으며 오류 발생이 가장 쉬운 부분은 처리 프로그램의 매개 변수와 진급 통계 부분이다.
다른 통계량에 대해서는 특별한 디자인 테스트 데이터가 없고 진급 통계 부분의 테스트 데이터에 다른 통계에 대한 테스트를 덧붙였다
 
네 가지 작업을 개별적으로 사용하는 경우를 테스트합니다.
  1、-c text.c (문자 수 계산)
  2、-w text.c (단어 수 계산)
  3、-l text.c(행수 계산)
  4、-o wrfile.txt(출력 파일 지정)
  5、-c text.c -o wrfile.txt
명령의 매개 변수 개수를 바꾸면 그들 각자의 효과를 동시에 얻을 수 있다
특정 단어의 개수:
  -w wordtext.c
7. 참고 문헌 링크
  http://www.cnblogs.com/xinz/archive/2011/10/22/2220872.html
  https://bbs.csdn.net/topics/392006952?page=1
거울로 삼다http://www.cnblogs.com/ldisbest/p/8619377.html

좋은 웹페이지 즐겨찾기