c++操作io常见命令

用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()>=2)
    {
        string compareStr=_words[0];
        vector<string> left;
        vector<string> right;

        for(int i=1;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=0;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",0);

    //查找第一个匹配的字符.
    cout<<cmd.search_index("ittle",filename)<<endl;

    //文本单词排序
    vector<string> Words=cmd.getwords(filename);
    vector<string> sort_words=cmd.sort_q(Words);
    for(int i=0;i!=sort_words.size();++i)
    {
        cout<<sort_words[i]<<endl;
    }

    //文本单词排序后去除重复.
    vector<string> unique_words=cmd.unique_w(sort_words);

    for(int i=0;i!=unique_words.size();++i)
    {
        cout<<unique_words[i]<<endl;
    }

}
时间: 2024-10-25 22:07:28

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

Redis学习笔记(字符串类型常见命令操作)

Redis字符串类型常见命令操作 存取数据 存字符串类型数据: 取字符串类型数据: 当键不在的时候会返回空 如果重复向一个键中存数据,后存储的数据会覆盖前存储的数据 递增数字 当存的字符串是整数形式的时候,Redis提供一个: INCR命令    作用:让当前键值递增,并返回递增后的值 当要递增的键值不存在的时候,redis会自动存入这个键,默认值为0,并把值递增 键的命名 键名Redis没有强制要求,一般命名形式为: 对象类型:对象ID:对象属性 例如: user:1:name  使用这个来存

Linux常见命令及常见知识点

Linux常见命令及常见知识点(学习) 绝对路径表示, 如:/etc/http.d 当前目录: ./ 上层目录: ../ 主目录:~/ 切换目录:cd 查看当前路径: pwd 查看当前进程:ps 显示所有进程: ps -ef (system v 输出) / ps -aux bsd 格式输出 查看指定进程信息:ps -ef | grep pid 执行退出:exit 清屏:clear 退出当前命令: ctrl + c (彻底退出) 执行睡眠:ctrl + z (挂起当前进程 恢复后台) 查看当前用户

ansys 常见命令集合

APDL换行与续行- APDL规定每行72个字符 如果要写表达式A=C1+C2 (C1与C2都为表达式 可以用 B=C1 A=B+C2 将一行拆成两行来做但是如果不是表达式,而是输入一个命令参数过多的话,可以用续行命令RMORE,格式如下: RMORE, R7, R8, R9, R10, R11, R12 这个命令每次也只能输入6个参数,如果多于6个,可以重复使用RMORE就可以输入13-18,19-24等等.另外,于上面续行相应的是换行,一行命令太短可以使用多个命令共一行 $",没有双引号.这

一个linux常见命令的列表

这是一个linux常见命令的列表. 那些有• 标记的条目,你可以直接拷贝到终端上而不需要任何修改,因此你最好开一个终端边读边剪切&拷贝. 所有的命令已在Fedora和Ubuntu下做了测试 命令 描述 • apropos whatis 显示和word相关的命令. 参见线程安全 • man -t man | ps2pdf - > man.pdf 生成一个PDF格式的帮助文件   which command 显示命令的完整路径名   time command 计算命令运行的时间 • time c

linux常见命令的列表

http://www.pixelbeat.org/cmdline_zh_CN.html 命令 描述 ? apropos whatis 显示和word相关的命令. 参见线程安全 ? man -t man | ps2pdf - > man.pdf 生成一个PDF格式的帮助文件   which command 显示命令的完整路径名   time command 计算命令运行的时间 ? time cat 开始计时. Ctrl-d停止.参见sw ? nice info 运行一个低优先级命令(这里是info

【Oracle】曾经的Oracle学习笔记(1-3) 数据库常见用语,常见命令,创建测试表

一.数据库的登录 二.数据库常用语 三.测试表的创建,测试数据初始化 四.常见命令介绍 五.测试 user:jeffreysn:jeffrey user:systemsn:jeffrey 浏览器中输入:http://127.0.0.1:8080/apex管理员登陆user:syssn:jeffrey 打开服务列表:win+r打开运行框,输入services.mscOracleServiceXE服务一定要是打开的,要不然oracle根本登录不了.OracleXETNSLintener服务是在我们使

maven学习教程(二)—— 常见命令、配置解析、HelloWorld

[摘要] |-- 常见命令介绍 |-- maven项目骨架介绍 |-- maven项目配置文件介绍 |-- DEMO:HelloWolrd |-- 通过一个简单的项目 |-- 熟悉项目骨架 |-- 熟悉常见命令及常见命令的作用 |-- 熟悉配置文件的一些常见配置 |-- 常见命令操作 |-- (1)mvn clean--使用maven清空编译:运行清理操作,会默认吧target目录清理掉 |-- (2)mvn clean compile--使用maven编译项目:运行清理,再运行编译操作:代码编

linux文件目录操作的相关命令

linux文件目录操作的相关命令 mkdir rmdir tree touch stat cp mv rm mkdir 功能说明:建立空目录 语 法:mkdir [-p][--help][--v][-m <目录属性>][目录名称] 补充说明:mkdir可建立目录并同时设置目录的权限. 选项: -m<目录属性> 建立目录时同时设置目录的权限. [[email protected]_18_121_centos ~]# mkdir -m 775 qin [[email protected

linux常见命令列表

转自 http://www.pixelbeat.org/cmdline_zh_CN.html 这是一个linux常见命令的列表.那些有? 标记的条目,你可以直接拷贝到终端上而不需要任何修改,因此你最好开一个终端边读边剪切&拷贝. 所有的命令已在Fedora和Ubuntu下做了测试 命令 描述 ? apropos whatis 显示和word相关的命令. 参见线程安全 ? man -t man | ps2pdf - > man.pdf 生成一个PDF格式的帮助文件   which comman