挑选出英文字符串中的 单词 并给出单词个数(C语言实现版本,C++版待完成)

本文提供了一个C语言程序,用于从文件中读取英文字符串,然后使用`strtok`函数分隔单词并计算单词数量。程序首先打开文件,获取文件大小,然后读取内容到缓冲区。接着,使用特定分隔符提取单词,并将结果保存到动态分配的字符指针数组中。最后,程序输出单词总数及每个单词。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//==============================================================================
// Filename    :  zzl.c
// Description : 
// 
// Author      :  RollStone (rs), jealdean@outlook.com
// Created     :  October 22, 2014, 5:15 PM
// Copyright   :  2007-2014 RollStone. All Rights Reserved. 
// Last_Change :  October 22, 2014, 5:15 PM
// Version     :  1.0
//==============================================================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include "zzl.h"
#define PIN      //param in
#define POUT     //param out
#define PINOUT   //prarm both in and out 
#define OPEN_MODE_READONLY    "rt"
#define WORD_DELIM            " ,';:.\n\r\""
/**
 * pick up word in buf
 * @param buf
 * @param pos
 * @return num of words
 */
int pick_words(PIN char *buf,POUT char **pResultArray);
int main(int argc, char **argv) {
    int fileSize, n;
    char *fileBuf;
    char *p, *q;
    FILE *fp = fopen(argv[1], OPEN_MODE_READONLY);
    if (!fp) {
        perror("fopen");
        return -1;
    }
    //get file size of bytes
    fseek(fp, 0L, SEEK_END);
    fileSize = ftell(fp);
    fseek(fp, 0L, SEEK_SET); // rewind the fp to start position of file
    fileBuf = (char*) malloc(sizeof (char)*(fileSize + 1));
    fread((void*) fileBuf, sizeof (char), fileSize, fp);
    if (fp) {
        fclose(fp);
        fp = 0;
    }
    char **resultArray = (char**) calloc(sizeof (char*), fileSize / 2);
    n = pick_words(fileBuf, resultArray);
    printf("there has %d words. they are :\n", n);
    char **pp=resultArray;
    while(*pp){
        printf("%s\n",*pp);
        pp++;
    }
    if (fileBuf) {
        free(fileBuf);
        fileBuf = 0;
    }
    if (resultArray) {
        free(resultArray);
        resultArray = 0;
    }
    return 0;
}

int pick_words(PIN char *wordbuf, POUT char **pResultArray) {
    char *cur;
    int wordLength = 0;
    cur = strtok(wordbuf, WORD_DELIM);
    if (cur != 0) {
        wordLength++;
        *pResultArray = cur;
        pResultArray++;
        do {
            cur = strtok(NULL, WORD_DELIM);
            wordLength++;
            *pResultArray = cur;
            pResultArray++;
        } while (cur);
    }
    return wordLength;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值