WordCount 인코딩 및 테스트
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.