第16周 项目2-指针作做参数,求句子中单词的个数

本文介绍了一个使用C++指针来计算字符串中单词数量的简单程序。通过分析源代码,展示了如何定义函数并利用指针遍历字符串,识别并计数其中的单词。



/* 
 * Copyright (c) 2014, 烟台大学计算机学院 
 * All rights reserved. 
 * 文件名称:test.cpp 
 * 作    者:呼亚萍 
 * 完成日期:2014年 12 月 14日 
 * 版 本 号:v1.0 
 * 
 * 问题描述:用指针作做参数,求句子中单词的个数
 * 输入描述:相应的程序
 * 程序输出:句子中单词的个数
 */ 

#include <iostream>
using namespace std;
int pwordnum(char *str);
int main()
{
    char s1[50]="Hu yaping. ";
    cout<<s1<<endl;
    cout<<"单词个数为:"<<pwordnum(s1)<<endl;//返回值为char型,可以直接显示
    return 0;
}
//作为示例,本函数采用了形参为数组,在实现中,直接用下标法进行访问
//实际上,在实现中,完全可以用指针法访问
int pwordnum(char *str)
{

     int n=0,j=10;
    for(int i=0; *(str+i)!='\0'; ++i)
    {

        if(*(str+i)==' ')
        j=10;
        else
            if(j==10)
            j=100;
        ++n;
    }
        return n;
}

运算结果:

知识点总结:

if语句的使用,求n的值不能直接加;

学习心得:

遇到问题,n为什么不能直接++n?带着问题继续努力,加油!


通过编写一个只包含部分保留字和单词符号(见下文中C语言子集L)的语言扫描器(词法分析器),掌握词法分析器的方法之一—状态转换图法。 二、实验环境 不限语言,实验环境自行配置 三、实验内容 1、该词法分析器的任务如下: (1)滤掉源程序中的无用成分,如空格; (2)输出分类记号供语法分析器使用,并产生两个表格(符号表):常数表和变量表(即标识符表),分别记录曾扫描到的变量和常量,表的数据结构和包含内容自行定义; (3)识别非法输入,并将其标记为“出错记号”。 2、该词法分析器的功能: 以后面段落3中定义的C语言子集的源程序为词法分析程序的输入,即源程序,源程序段存放在文件中。词法分析器打开该文件后,自文件头开始扫描源程序字符,发现符合“单词”定义的源程序字符串时,将它翻译成固定长度的单词内部表示,并查填适当的信息表(符号表),一旦发现不符合“单词”定义的源程序字符串时,给出错误提示。经过词法分析后,源程序字符串(源程序的外部表示)被翻译成具有等长信息的单词串(源程序的内部表示),并产生两个表格:常数表和变量表(即标识符表),它们分别包含了源程序中的所有常数和所有标识符。即该词法分析器可将下面C语言子集L所定义的“单词”区分开来,识别输入的源程序代码中每个“单词”是关键字,还是常量,还是变量,对于变量还要记录变量个数,识别不同的变量,如程序段:real xx,y;xx=1;if(xx=1)y=5;要能识别出有2变量,分别是xx,y,第1次扫描到xx,识别出是(6,0) 第2次、第3次扫描到xx,识别出仍是(6,0);第1次扫描到y,识别出是(6,1) ,第2次扫描到y,识别出仍是(6,1);对于常数采用同样的识别方法。 3、C语言子集L----保留字不区分大小写 L={ IF,THEN,ELSE,INT,CHAR,FOR,=,>=,==,+, /,%,++,", ; }∪{常数}∪{变量,即标识符},变量只由字母构成,字母个数小于10。 4、实验要: (1)词法分析器构造原理,单词符号(记号)的分类编码表,状态转换图设计绘制写在实验报告中;  (2)进行词法分析器的测试:测试例程(一小段程序)、测试结果与测试结果分析。 5、例子: 本例中单词符号(记号)的种类: 1、保留字(关键字); 2、分隔符; 3、运算符; 4、常数; 5、标识符 (单词符号的分类可以自己规定,请在实验报告中给出分类编码表) 测试用例 第一段: for (i=1;i<=100;i++) { printf("%d ", i ); } over 运行词法分析程序后,显示结果如下: for (for,16) ( ((,err) i (i,51) = (=,31) 1 (1,41) ; (;,22) i (i ,51) <= (<=,err) 100 (100,42) ; (;,22) i (i ,51) ++ (++,37) ) (),err) { ({,err) Printf (Printf,52) ( ((,err) " (" ,21) % (%,36) d (d,53) " (" ,21) , (,,err) i (i,51) ) ( ),err) ; ( ;,22) } ( },err) over 常数表中的内容为:1,100 变量表(标识符表)中的内容为:i,printf, d
03-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值