首页 > 系统相关 >Linux 环境 c++ 实现单词数量统计

Linux 环境 c++ 实现单词数量统计

时间:2024-12-21 12:57:55浏览次数:7  
标签:string ++ c++ 单词 int file Linux define

g++ 的使用

g++的安装升级

#安装gcc
sudo apt-get install gcc
#安装g++
sudo apt-get install g++

c++ 编译

g++ -o 【生成目标文件名】 【c++代码源文件】

命令行传参

使用命令行传参时使用此 main 函数

argc 表示传入参数个数

argv 用来访问参数,0 为程序的名称,1 到 argc-1 为用户传入的参数

int main(int argc, char* argv[])
举例
int main(int argc, char* argv[]){
    cout << argv[1] << endl;
}
./【文件名】 hello, world
#输出 hello, world

实现单词统计

文件操作

使用<fstream>头文件

fstream file; file.open (filename.c_str(),ios::in);

由于传参时使用的 filename 时 string 类型,此时需要转换为 c 字符串。

当文件使用完毕,使用 file.close 关闭文件。

通过 file.get( ) 逐个访问文件中的字符。

统计原理

设定两个状态,单词状态和分隔符状态(非单词状态),初始状态设置为分隔符状态。

当文件逐个字符读取时,状态从非单词状态改变为单词状态时,视为单词 +1。

#define s_out 0
#define s_in 1
#define init s_out

区分非单词

使用 string 的库函数 find,查找出当前读取字符是否为分隔符,当结果为否时,find 函数会返回 npos 表示空。

分隔符有:空格 \n \t " ' + - , 。 ; (也可以根据需要修改,字符串中表示"需要添加\转义)

bool splite(char c) {
    const string split_chars = " \n\t\"'+-,.;";
    return split_chars.find(c) != string::npos;
}

最终代码

#include<iostream>
#include<fstream>
#include<string>

#define s_out 0
#define s_in 1
#define init s_out

using namespace std;

bool splite(char c) {
    const string split_chars = " \n\t\"'++,.;";
    return split_chars.find(c) != string::npos;
}

int count_word(string& filename) {
        int count = 0;
        bool status = init;
        
    fstream file;
    file.open (filename.c_str(),ios::in);
    
    if (!file.is_open()) {
               cerr << "open failed" << endl;
        return -1;
    }
    else{
            cout << "open sucessfully" << endl; 
            char c; 
                while(file.get(c)) {
                        if(splite(c))
                        {
                                status = s_out;
                        }
                        else if(status == s_out){
                                status = s_in;
                                count++;
                        }
                }
        }
        file.close();
        return count;
}

int main(int argc, char* argv[]){
        string filename;
        filename = argv[1];
        if(!filename.empty()){
                cout << "word: " <<count_word(filename) << endl;        
        }
        else{
                cout << "the flie "<< filename <<" is empty" << endl; 
        }
        return 0;
}

标签:string,++,c++,单词,int,file,Linux,define
From: https://blog.csdn.net/qq_69580466/article/details/144597489

相关文章

  • 鼠标 芯片pc110 linux驱动程序
    /*Copyright©2000-2001VojtechPavlikBasedontheworkof:AlanCoxRobinO’Leary*//*IBMPC110touchpaddriverforLinux*//*Thisprogramisfreesoftware;youcanredistributeitand/ormodifyitunderthetermsoftheGNUGeneralPubli......
  • 鼠标 芯片pxa930 linux驱动程序
    /*PXA930trackballmousedriverCopyright©2007MarvellInternationalLtd.initialversionThisprogramisfreesoftware;youcanredistributeitand/ormodifyitunderthetermsoftheGNUGeneralPublicLicenseversion2aspublishe......
  • linux中使用opencv的avi编码视频格式无法被浏览器访问
    avi编码介绍        AVI编码器,AVI英文全称为AudioVideoInterleaved,即音频视频交错格式。就是编码语音和影像同步组合在一起的文件格式。解决办法步骤:1. 卸载原来使用PyPI下载的opencv-python以及opencv-contrib-pythonpipinstallopencv-pythonopencv-con......
  • linux 安装nginx
    1.解压安装包tar-zxfnginx-1.25.1.tar.gz2.进入解压后文件夹cdnginx-1.25.13.配置nginx./configure4.编译安装make&&makeinstall5.运行nginx进入目录cd/usr/local/nginx/sbin启动nginx./nginx6.配置nginx7.重启nginx/usr/local/nginx/sbin/ngin......
  • C++ 中面向对象编程如何处理对象的状态存储与恢复?
    对象状态存储与恢复的基本概念在C++面向对象编程中,对象的状态是由其成员变量的值来确定的。对象状态存储是指将对象当前的成员变量值保存起来,而对象状态恢复则是指将之前保存的成员变量值重新赋值给对象,使对象回到之前的某个状态。通过序列化和反序列化实现状态存储与恢......
  • Linux中查看CPU、内存和IO的占用情况
    转自:https://www.cnblogs.com/ariesblog/p/13807845.html对于服务器的监控,主要还是查看CPU、内存以及IO的占用情况,在此做个简单的了解一、常用命令1、top命令top命令应该是使用比较多的一个,可以看到CPU和内存的占用情况以及进程的PID,进入top页面后,大写的字母P和M分别是按照CPU......
  • C++ 中面向对象编程如何处理对象的状态存储与恢复?
    1.为什么需要处理对象的状态存储与恢复?在一些应用场景中,需要保存对象的当前状态,以便在以后的某个时间点恢复到这个状态。例如,在游戏中可以保存玩家的进度,在软件的撤销/重做功能中需要保存对象在不同操作下的状态。2.在C++中如何实现对象的状态存储与恢复?手动实现:可以在......
  • Linux IPC:互斥锁与条件变量汇总整理
    互斥锁(Mutexes)和条件变量(ConditionVariables)是线程同步中非常重要的概念。它们被广泛应用于多线程编程中,以解决并发访问共享资源的问题。下面将详细介绍互斥锁和条件变量的概念、用途、API以及示例代码。互斥锁(Mutexes)互斥锁是一种用于保护临界区(CriticalSection)的机制......
  • 【C++】智能指针详解
    ......
  • 只谈C++11新特性 - nullptr
    nullptr在C++11标准中,引入了nullptr关键字,用来表示空指针。这是对原有NULL的重要改进,提供了更强的类型安全性,并避免了一些常见的编程错误。1.nullptr的特点nullptr是一种新类型std::nullptr_t的常量,用于表示空指针。与NULL不同,nullptr具有明确的指针类型......