#include"string.h"
int main()
{ int i,j,n=0
char s[200]
FILE*fp
fp=fopen("0.cpp","r")
while(!feof(fp))
{fgets(s,200,fp)
// printf("%s",s)
for(i=0s[i]==' 'i++)
if(s[i]=='/'&&s[i+1]==' ')continue
if(s[i]=='('&&s[i+1]==')')continue
if(strlen(s)==1)continue
n++
}
printf("%d\n",n)
fclose(fp)
return 0
}
一、关键是思路, 单词, 行,字符,数字, 他们有什么特点:
1、单词,标准的是遇到空格后,单词数,自动加一。
2、行是以\n结束的, 也就是说, 遇到\n行数加一,当然也视你的 *** 作系统而言, windows的话,就是这样。
3、字符, 空格是否记在里面? 等因素需要考虑。
4、数字,这个的统计,通过ascll表, 或者,字符,都能很好的解决。
二、例程:
#include <iostream>#include <vector>
using namespace std
class txt
{
public:
txt(vector<char> cha){ch = cha}
void count_word() //统计单词数
void count_line() //统计行数
void count_ch() //统计字符数
private:
vector<char> ch
}
void txt::count_line()
{
int count = 0
for (int i=0i < ch.size()i++)
{
if ('\012' == ch[i])
count++
}
cout << "总行数:" << count <<endl
}
void txt::count_word()
{
int count = 0
bool v=true
for (int i=0i < ch.size()i++)
{
if (!(ch[i]>='a'&&ch[i]<='z')||(ch[i]>='A'&&ch[i]<='Z'))
{
if (v)
count++
v=false
}
else
v=true
}
cout << "单词数:" << count <<endl
}
void txt::count_ch()
{
int count = 0
for (int i=0i < ch.size()i++)
{
if ('\012' != ch[i])
count++
}
cout << "字符数:" << count <<endl
}
int main()
{
vector<char> words
cout << "请输入多行文本,空行结束:" <<endl
char word
//输入文本,不忽略空格和换行
cin.unsetf( ios::skipws )
while (cin >> word )
{
//判断如果输入的是数字,则返回
if (word >= '0' && word <= '9')
{
cout << "对不起,您输入的字符中含数字。" << endl
return -1
}
words.push_back(word)
int i = words.size()
if (words[i-2] == '\012' && words[i-1] == '\012')
{
break
}
}
//删除最后一个空行,因空行代表结束
words.pop_back()
//定义类对象
txt t(words)
t.count_line()
t.count_word()
t.count_ch()
return 0
}
循环读入字符,遇到\n累计行数,最终输出累计值即可。
以EOF作为终止条件的代码如下:
#include <stdio.h>int main()
{
int cnt = 1//最少会输出一行,每遇到一个换行,表示多输入了一行。
int c
while((c = getchar())!=EOF)
{
if(c == '\n') cnt++//统计行数。
}
printf("%d\n",cnt)
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)