用c++练习下 系统常见io命令。

1)显示文档的文本
2)统计文本单词数字
3)列出目录所有文件  ,递归思路
4)查找第一个匹配的字符.
5)文本单词排序,  快速排序,其实还是递归思路
6)文本单词排序后去除重复.

  除了3和6,可以练下手,其他没太大意义。

command.h

#ifndef COMMAND_H_INCLUDED
#define COMMAND_H_INCLUDED #include <iostream>
#include <fstream>
#include "utility.h"
#include "io.h"
#include "stdio.h" using namespace std; class command
{
public:
int wc(const string&,const char);
void cat(const string&);
void ls(const string& _path,int );
int search_index(const string&,const string&);
//void ls(const string&);
vector<string> getwords(const string&);
vector<string> sort_q(const vector<string>&); vector<string> unique_w(const vector<string>&); }; vector<string> command::unique_w(const vector<string>& _ws)
{
vector<string> temp;
string comparestr="";
for(int i=0;i!=_ws.size();++i)
{
if(_ws[i]!=comparestr)
{
temp.push_back(_ws[i]);
comparestr=_ws[i];
}
}
return temp;
} vector<string> command::getwords(const string& _filename)
{
vector<string> Ret;
ifstream in;
Utility::open_file(in,_filename);
string line;
while(getline(in,line))
{
int frontP=0;
for(int i=0;i!=line.size();++i)
{
if(line[i]==' '||line[i]==','||i==line.size()-1)
{
Ret.push_back(line.substr(frontP,i-frontP));
frontP=i+1;
}
}
}
return Ret;
} vector<string> command::sort_q(const vector<string>& _ws)
{
return Utility::sort_quick(_ws);
} int command::wc(const string& _filename,const char _option)
{
int RSTcount=0;
switch(_option)
{
case 'w':
{
ifstream in;
Utility::open_file(in,_filename);
string line;
while(getline(in,line))
{
for(int i=0;i!=line.size();++i)
{
if(line[i]==' '||line[i]==',')
{
++RSTcount;
}
}
++RSTcount;
}
}
case 'c':
{
//统计字符。
}
}
return RSTcount;
} void command::cat(const string& _filename)
{
ifstream in;
Utility::open_file(in,_filename);
string line;
while(getline(in,line))
{
cout<<line<<endl;
}
} struct dir
{
public:
int isFolder;
string name;
}; void command::ls(const string& _path,int l)
{
string dir=_path+"\\*.*";
vector<_finddata_t> files;
_finddata_t tmpfile; //测试发现第一个file的句饼一般是.,所以tmpfile不处理.
long lfDir= _findfirst(dir.c_str(),&tmpfile); if(lfDir!=-1l)
{
while(_findnext(lfDir,&tmpfile)==0)
{
string space;
for(int i=0;i!=l;++i)
{
space+=" ";
} if(tmpfile.attrib==_A_SUBDIR&&(tmpfile.name[0])!='.')//好像有隐藏的.和..文件夹,代表上一个文件夹.这里要去掉.
{ printf("%s%s\n",space.c_str(),tmpfile.name);
ls(_path+"\\"+tmpfile.name,l+1);//习惯了自增++,这里只是要把l+1后传给参数.本身不需要加1.
}
else if(tmpfile.attrib!=_A_SUBDIR)//没有文件属性.只能用非文件来替换.以免上面的,上一文件夹..到这里.
{
printf("%s%s\n",space.c_str(),tmpfile.name);
}
}
}
_findclose(lfDir);
} int command::search_index(const string& _word,const string& _filename)
{
ifstream in;
Utility::open_file(in,_filename);
string line;
string lines;
while(getline(in,line))
{
lines+=line;
} int position=0;
bool pitch=false;
for(position=0;position!=lines.size();++position)
{
int index=0;
pitch=true;
for(index=0;index!=_word.size();++index)
{
if(lines[position+index]!=_word[index])
{
pitch=false;
break;
}
}
if(pitch)
{
break;
}
} if(pitch)
{
return position;
}
else
{
return -1;
}
} #endif // COMMAND_H_INCLUDED

  

utility.h

#ifndef UTILITY_H_INCLUDED
#define UTILITY_H_INCLUDED
#include <iostream>
#include <fstream> using namespace std; namespace Utility{
ifstream& open_file(ifstream&,const string&);
vector<string> sort_quick(const vector<string> _words); }
ifstream& Utility::open_file(ifstream& _in,const string& _filename)
{
_in.close();
_in.clear();
_in.open(_filename.c_str());
return _in;
} //快速排序,性能应该需要优化下.但思路是快速排序思路.
vector<string> Utility::sort_quick(const vector<string> _words)
{
if(_words.size()>=)
{
string compareStr=_words[];
vector<string> left;
vector<string> right; for(int i=;i!=_words.size();++i)
{
if(_words[i]>=compareStr)
{
right.push_back(_words[i]); }
else
{
left.push_back(_words[i]);
}
} left=sort_quick(left);
right=sort_quick(right); left.push_back(compareStr); for(int i=;i!=right.size();++i)
{
left.push_back(right[i]);
}
return left;
}
else
{
return _words;
}
} #endif // UTILITY_H_INCLUDED

 

main.cpp

void mainCommand()
{
command cmd;
string filename="text.txt"; //显示文本
cmd.cat(filename); //统计单词数字
int couta=cmd.wc(filename,'w');
cout<<"words:"<<couta<<endl; //列出目录所有文件
cmd.ls("E:\\db\\stl",); //查找第一个匹配的字符.
cout<<cmd.search_index("ittle",filename)<<endl; //文本单词排序
vector<string> Words=cmd.getwords(filename);
vector<string> sort_words=cmd.sort_q(Words);
for(int i=;i!=sort_words.size();++i)
{
cout<<sort_words[i]<<endl;
} //文本单词排序后去除重复.
vector<string> unique_words=cmd.unique_w(sort_words); for(int i=;i!=unique_words.size();++i)
{
cout<<unique_words[i]<<endl;
} }

文件大小

long getFileSize6(const char* strFileName)
{
    std::ifstream in(strFileName);
    if (!in.is_open()) return 0;

in.seekg(0, std::ios_base::end);
    std::streampos sp = in.tellg();
    return sp;
}

追加数据。

基本步骤:
//读写打开文档.
//定位输出位置.
//存储会被抹去的数据到临时区.
//写入目标数据.
//再补充被抹去的数据.
fstream fs(file.c_str(),ios::in|ios::out);
string line;
fs.seekg(2,ios::beg);
getline(fs,line);
fs.seekp(2,ios::beg);
fs<<"123"<<flush;
fs<<line<<endl;
fs.close();

//ios::beg: 文件开头
//ios::cur: 文件当前位置
//ios::end: 文件结尾

//seek 查询,重定位

//tell 告诉,返回.
//g (get) 输入流,p (put) 输出流.
//3种流,都只有一个状态数据来表示位置.当读写流时要切换位置时候,必须用 seekg或seekp来重定位读写位置.

如果读入确定的字符用。is.read:(p,size)

如果不确定字符,用 is.get(p,size,'')

因为测试发现,用 is.get,当只有前2个参数,不知道为什么会少一个字符。可能是默认把最后一个字符当成分隔符,留在流中?

c++操作io常见命令的更多相关文章

  1. linux的基本操作与常见命令

    linux的基本操作与常见命令: jdk的安装: 步骤:(特别注意:虚拟机安装的一般是32位的操作系统,jdk也必须使用32位的) 查看虚拟机版本:sudo uname --m i686 //表示是3 ...

  2. 后端程序员必备的 Linux 基础知识+常见命令(近万字总结)

    大家好!我是 Guide 哥,Java 后端开发.一个会一点前端,喜欢烹饪的自由少年. 今天这篇文章中简单介绍一下一个 Java 程序员必知的 Linux 的一些概念以及常见命令. 如果文章有任何需要 ...

  3. 2 . Linux常见命令

    Linux常见命令格式: 命令名称 选项 参数 ls -alh 文件/目录 --all #ls 显示当前目录内容 #ls -l 显示文件详细信息 #ls -hl h已常见单位显示文件大小 k M G# ...

  4. [Linux基础]Linux基础知识入门及常见命令.

    前言:最近刚安装了Linux系统, 所以学了一些最基本的操作, 在这里把自己总结的笔记记录在这里. 1,V8:192.168.40.10V1:192.168.40.11Linux ip:192.168 ...

  5. 嵌入式Linux开发教程:Linux常见命令(上篇)

    摘要:这是对周立功编著的<嵌入式Linux开发教程>的第7期连载.本期刊载内容有关LinuxLinux常见命令中的导航命令.目录命令和文件命令.下一期将连载网络操作命令.安装卸载文件系统等 ...

  6. 关于XShell的常见使用和设置以及Linux中的常见命令.

    本文部分转自:http://sundful.iteye.com/blog/704079 和 http://www.vckai.com/p/5 有时候在XShell中操作的一些命令傻傻的分不清这个命令到 ...

  7. 一个linux常见命令的列表

    这是一个linux常见命令的列表. 那些有• 标记的条目,你可以直接拷贝到终端上而不需要任何修改,因此你最好开一个终端边读边剪切&拷贝. 所有的命令已在Fedora和Ubuntu下做了测试 命 ...

  8. Linux常见命令(二)

    随着Linux应用的扩展许多同学开始接触Linux,根据学习Windwos的经验往往有一些茫然的感觉:不知从何处开始学起.虽然Linux桌面应用发展很快,但是命令在Linux中依然有很强的生命力.Li ...

  9. Linux常见命令(三)

    今天我们来介绍第三个命令:pwd. Linux中用 pwd 命令来查看”当前工作目录“的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来 ...

随机推荐

  1. PHP删除MySQL数据库下的所有数据表

    <?php //[数据无价,请谨慎操作!] $hostname ='localhost';  $userid = 'username';  $password = 'password';  $d ...

  2. discuz阅读权限的设置作用

    为什么要有阅读权限?偶想很多新手有这个疑问吧,所以特开此帖说明下. 阅读权限的设置是帖子作者为了部分限制帖子的读者群.虽然网上发帖重在分享,但帖子(尤其精华帖子)是作者花时间和经历而写成的,不加阅读权 ...

  3. ACM第四站————最小生成树(普里姆算法)

    对于一个带权的无向连通图,其每个生成树所有边上的权值之和可能不同,我们把所有边上权值之和最小的生成树称为图的最小生成树. 普里姆算法是以其中某一顶点为起点,逐步寻找各个顶点上最小权值的边来构建最小生成 ...

  4. DevExpress.XtraGrid.Views.BandedGrid.BandedGridView

    使用的是DevExpress.XtraGrid.Views.BandedGrid.BandedGridView 类 没有在工具箱里找到对应控件 ,绕了一下,先创建一个gridcontrol ,然后gr ...

  5. android技术总结

    1.要做一个尽可能流畅的ListView,你平时在工作中如何进行优化的? ①Item布局,层级越少越好,使用hierarchyview工具查看优化. ②复用convertView ③使用ViewHol ...

  6. [转载]Android系统开机画面的实现

    Android系统开机画面分为下面三个阶段: 1.开机图片:Android内核是基于标准内核的,对linux比较熟悉,特别是在开发板上移植过Linux系统的人就知道在内核引导过程中会显 示出一 个小企 ...

  7. JVM的classloader(转)

    Java中一共有四个类加载器,之所以叫类加载器,是程序要用到某个类的时候,要用类加载器载入内存.    这四个类加载器分别为:Bootstrap ClassLoader.Extension Class ...

  8. 我的CSS样式记事本(1)

    文本 行高: line-height 对齐方式: text-align 字符间距: letter-spacing 文本修饰: text-decoration字体 设置字体所有: font 字体类型: ...

  9. 周赛-The Number Off of FFF 分类: 比赛 2015-08-02 09:27 3人阅读 评论(0) 收藏

    The Number Off of FFF Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...

  10. jquery简单插件到复杂插件(2)--简单手风琴

    手风琴就是展示与隐藏 <div id="dataContent"> <div class="dataLeft fl"> <div ...