@[TOC] 使用C语言分析分析英文字符串中的单词

分析英文字符串时会产生的问题

比如一句英文: we eat dinner at four o’clock,noodles is delicious. 要提取这句英文字符串的单词时,要区分以下四个英文标点字符:
1. 空格
2.
3. ,
4. .
以便得到英文单词:
1. we
2. eat
3. dinner
4. at
5. four
6. o’clock
7. noodles
8. is
9. delicious

简化条件

为了简化编程的复杂度,目前仅区分以下三个英语标点字符:
1. 空格
2. ,
3. .
此时 o’clock 可能分被解为两个字符: oclock
会得到以下英文单词:
1. we
2. eat
3. dinner
4. at
5. four
6.o
7.clock
8. noodles
9. is
10. delicious

分析方法

1.分析字符串的第一个单词
2.分析字符串的最后一个单词
3.分析字符串除第一个单词和最后一个单词以外的其它单词

详细分析

将字符串去掉o’简化为如下字符串:
we eat dinner at four clock,noodles is delicious.

  1. 第一个单词:we
    起始位置:字符串的0索引
    终止位置:终止位置的下一个字符为空格
  2. 最后一个单词:delicious
    起始位置:起始位置的上一个字符为空格
    终止位置:终止位置的下一个字符为非字母单词
  3. 其余的单词,比如:at
    起始位置:起始位置的上一个字符为空格
    终止位置:终止位置的下一个字符为空格

C++代码

C++代码如下

main.cpp

// main.cpp
#include <iostream>
#include<string.h>
#include"VString.h"
int isMeanChar(char c);
const char* substr(const char* pString,int begin,int end);
int main(int argc, char** argv) {int i = 0;int j = 0;int k = 0;int bindex=0; int eindex=0;int begin[1024]={-1};int end[1024]={-1};//char word[1024]="now is the time for all good men to come to the aid of their party.";char word[1024]="we eat dinner at four o'clock,noodles is delicious.";for(int i=0;i<1024;i++) {   if(i>strlen(word)){break;}if(i==0){begin[bindex]=i;bindex++;} if(  (i-1)>0 && isMeanChar(*(word+i-1))<0  && isMeanChar(*(word+i))>0 ){/*从非字符到字符,是一个单词的起始*/begin[bindex]=i;bindex++;}if( (i+1<=strlen(word)) && isMeanChar(*(word+i))>0 && isMeanChar(*(word+i+1))<0 ){/*从字符到非字符,是一个单词的结束*/end[eindex]=i;eindex++;}}for(j=0;j<=20;j++){printf("%d:[%d,%d]\n",j+1,begin[j],end[j]);}VString *wordString=new VString();bindex=0; eindex=0;while(end[k]!=0){printf("%s\n",wordString->substr(word,begin[k],end[k]));k = k + 1;}delete wordString;wordString = NULL;return 0;
}int isMeanChar(char c){int n=(int)c;if( (n>=48) && (n<=57) ){/*阿拉伯数字*/return 1;}if( (n>=65) && (n<=90) ){/*大写英文字母*/return 1; }if( (n>=97) && (n<=122) ){/*小写英文字母*/return 1; }return -1;
}

VString.h

#ifndef _VSTRING_H_
#define _VSTRING_H_
//#define NULL 0x0
#define ARRAY_SIZE      16
#define ARRAY_SIZE_512K 512*1024
#define ARRAY_SIZE_1M   1024*1024 #include<string.h>
class VString{public:VString(){this->pString = NULL;}~VString(){deleteMemory();}
public:char* substr(const char* pString, int begin, int end);
protected:char *pString;private:int isNull(const char* pString){if ((pString == NULL)||((unsigned int)pString==0xcccccccc)){return 0;}else{return 1;}}//分配内存空间  char* newMemorySpace(int size);void  zeroMemory(int size);void  deleteMemory();
};
#endif

VString.cpp

#include "VString.h"char* VString::substr(const char* pString,int begin,int end){int i,j;int size=end-begin+1;char* pSubstr=newMemorySpace(size+1);for( i=begin, j=0;i<=end;i++,j++){pSubstr[j]=pString[i];}pSubstr[j]=0x0;return pSubstr;
}void VString::zeroMemory(int size){for (int i = 0; i < size; i++){*(this->pString + i) = 0x0;}
}char* VString::newMemorySpace(int size){if(isNull(this->pString)!=0){delete this->pString;this->pString = NULL;}this->pString = new char[size];zeroMemory(size);return this->pString;
}void  VString::deleteMemory(){if (isNull(this->pString) != 0){delete this->pString;this->pString = NULL;}
}

测试结果

参考

代码的开发灵感来于《C程序设计语言(第二版是 新版)》(The C Programming Language Second Edition)一书关于使用二叉排序树计算英文单词的频率。

使用C语言分析分析英文字符串中的单词相关推荐

  1. c语言两字符串转数字后相加,一个觉得很难的C语言问题。对两个数字字符串相加。 C语言 如何把一个字符串中相连的两个数字转化为一......

    导航:网站首页 > 一个觉得很难的C语言问题.对两个数字字符串相加. C语言 如何把一个字符串中相连的两个数字转化为一... 一个觉得很难的C语言问题.对两个数字字符串相加. C语言 如何把一个 ...

  2. python输入一个英文句子、统计单词个数_C语言编程求一个英文句子中的单词数和最长单词的位置、长度及输出这个单词。c++编程 从键盘输入一个英文...

    C语言编程求一个英文句子中的单词数和最长单词的位置.长度及输出这个单词. c++编程 从键盘输入一个英文 www.zhiqu.org     时间: 2020-11-23 我刚做了一关于英文句子里面每 ...

  3. R语言str_trim函数去除字符串中头部和尾部的空格

    R语言str_trim函数去除字符串中头部和尾部的空格 目录 R语言str_trim函数去除字符串中头部和尾部的空格 #导入包和库 #仿

  4. R语言str_extract函数从字符串中抽取匹配模式的字符串

    R语言str_extract函数从字符串中抽取匹配模式的字符串 目录 R语言str_extract函数从字符串中抽取匹配模式的字符串 #导入包和库

  5. R语言str_sub函数从字符串中提取或替换子字符串(substring):str_sub函数指定起始位置和终止位置抽取子字符、str_sub函数指定起始位置和终止位置替换子字符串

    R语言str_sub函数从字符串中提取或替换子字符串(substring):str_sub函数指定起始位置和终止位置抽取子字符.str_sub函数指定起始位置和终止位置替换子字符串 目录

  6. R语言nchar函数统计字符串中字符个数实战

    R语言nchar函数统计字符串中字符个数实战 目录 R语言nchar函数统计字符串中字符个数实战 #基础语法

  7. 数据结构源码笔记(C语言):统计字符串中出现的字符及其次数

    //统计一个字符串中出现的字符及其次数 #include<stdio.h> #include<malloc.h> #include<string.h>#define ...

  8. C语言——从字符串中统计单词的频数

    C语言--从字符串中统计单词的频数 #include<stdio.h> #include<string.h> #include<malloc.h>typedef s ...

  9. C语言-输入一行英文字符串统计单词个数

    C语言-输入一行英文字符串统计单词个数,单词之间以空格隔开 判断是否为单词的依据,通过一个flag标识,flag为0表示字符为空格,接下来出现不是空格,会将flag置为1 只有当flag为1且当前字符 ...

最新文章

  1. 专注,专注,还是专注
  2. android从放弃到精通 第四天 happy
  3. 线性规划图解法求最优解_干货 | 线性规划知识点汇总
  4. 【图论】旅行者(P5304)
  5. 探讨C#中字符串的加密
  6. @Transactional事务生效条件与样例
  7. java英语词汇_java常用的英语单词
  8. 调整idea中控制台及右侧提示框字体大小
  9. sklearn实践之——计算回归模型的四大评价指标(explained_variance_score、mean_absolute_error、mean_squared_error、r2_score)
  10. mac 升级到mavericks 安装php扩展现问题
  11. 计算机分屏功能吗,电脑分屏显示
  12. matlab如何z变换,MATLAB第3章Z变换详解.ppt
  13. 【应用统计学】总体均值的假设检验
  14. 记录:删除鼠标右键的某个“流氓”选项
  15. 印象笔记android,Android
  16. Java Future详解与使用
  17. 计算机网络回环测试命令,实验二 常用网络测试命令.doc
  18. 【观点】“马云:金融是要为外行人服务,这个观点其实并不新鲜
  19. 职场语言的特征3p1A7C指什么,商务礼仪选择题和答案
  20. 可以放置Google Adsense广告的博客汇总

热门文章

  1. win平台源码编译python静态库和一些坑
  2. windows 01
  3. 基于八叉树的网格生成算法剖析
  4. 日语学习资料-考研日语203历年真题合集(1993-2012年)
  5. CSharp(C#)语言_委托和事件区别详解
  6. 光通量发光强度照度亮度关系_科学网—[转载]光通量、发光强度、亮度、照度等概念的定义 - 姬海鹏的博文...
  7. CentOS Linux安装中文字体库,解决中文乱码问题
  8. 【矩阵论笔记】正交补空间
  9. ad-矩阵-io口多按键驱动
  10. 计算机辅助技术基础知识点,计算机辅助设计技术基础知识.PPT