我最近就是为这道题郁闷 大虾们速来帮忙啊!!

tianhang2009 2009-06-19 10:16:53
录入一篇英文文章(存放在字符数组a【n】中),统计单词个数,
假定这段文章不超过1000个字符,单词不超过240个。
请自我设计录入结束条件。
这道题要用指针的一维数组做哦 我想的是每个单词之间都有空格 可是文章都有标点的 怎么排除非单词 我想不懂
希望大虾给做个程序自学一下 最好是完整的这道题的程序 谢谢了!! !

orz!!!!
...全文
45 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
棋盗 2009-06-21
  • 打赏
  • 举报
回复
抱歉,粘的是没改的,本来最后的输出是这样的
if(a[i-1]>='a'&&a[i-1]>='A'&&a[i-1] <='z'&&a[i-1] <='Z')
cout < <"共有" < <s < <"个单词" < <endl;
else cout < <"共有" < <s +1< <"个单词" < <endl;
如果结尾没有标点最后一个单词不计
所以有个判别
19楼的大哥问题指出的很对,这问题不仅会出现在结尾,
在任何两个标点连着的地方都有这样的问题,受教了!
再加一段复查代码:
if (a[i]>='a'&&a[i]<='z'|| a[i]>='A'&&a[i] <='Z')//2判断分小写和大写
i=0;
else
i=1;
for(;i<=strlen(a);i++)
{
if(a[i]>'z'&&a[i]>'Z'||a[i] <'a'&&a[i] <'A')//确定一个单词结束 /*3和2同样的问题*/
if(a[i-1]>'z'&&a[i-1]>'Z'||a[i-1] <'a'&&a[i-1] <'A')
s=s-1;
}



ysysbaobei 2009-06-21
  • 打赏
  • 举报
回复
顶下
xmrforever 2009-06-21
  • 打赏
  • 举报
回复

#include <conio.h>
#include <iostream.h>
#include <string.h>
#include <stdio.h>
int main()
{
int i=0/*1初始化i,否则不能直接a[i]访问*/,s,t,j,p;
char a[1000];
cout <<"请输入一篇文章" <<endl;
gets(a);
puts(a);
// if(a[i]>='a'&&a[i]>='A'&&a[i] <='z'&&a[i] <='Z')//确定第一个字符是否为标点
if (a[i]>='a'&&a[i]<='z'|| a[i]>='A'&&a[i] <='Z')//2判断分小写和大写
i=0;
else
i=1;
t=i;//第一个单词起始位置
s=0;
// cout <<t <<endl;
for(;i<=strlen(a);i++)
{
if(a[i]>'z'&&a[i]>'Z'||a[i] <'a'&&a[i] <'A')//确定一个单词结束 /*3和2同样的问题*/
{
s=s+1;
j=i;//记录结束时位置
}
else continue;//未遇到空格或标点(单词没结束)进入下一次循环
for(p=t;p <j;p++)//输出刚确定的单词
{
cout <<a[p];
}
t=j+1;//下一个单词的起始位置
cout <<endl;
}
// if(a[i-1]>='a'&&a[i-1] <='z'||a[i-1]>='A'&&a[i-1] <='Z') //这句注释掉后如果最后一个标点多于1个就会出现问题
cout <<"共有" <<s-1 <<"个单词" <<endl;

return 0;
}

xmrforever 2009-06-21
  • 打赏
  • 举报
回复
我把楼上的程序改了一下

#include <stdio.h>
// // #include<conio.h>
// #include <windows.h>
#include <iostream.h>
// #include <string>
//
// #define Step 10 //空间增加的步长.
//
// char * getstr() //任意长度的字符串输入,返回字符串的首地址.
// {
// char *temp, *str=(char *)malloc(10);
// int c=0, len=0, times=1, number=0;
// if(!str)
// {
// printf("内存不够,无法开辟字符串空间!");
// return (char *)NULL;
// }
// number+=times*Step;
// while((c=getche())!='\r') //遇到回车则输入结束。
// {
// if(len==number)
// {
// times++;
// number=times*Step;
// temp=str;
// str=(char *)realloc(str,number);
// if(str==NULL)
// {
// printf("内存不够,字符串输入受限!");
// str=temp;
// break;
// }
// }
// *(str+len)=c;
// len++;
// }
// str=(char *)realloc(str,len+1); //字符串的实际长短调整空间.
// *(str+len)='\0';
// return str;
// }
//
// int main()
// {
// char *str=NULL;
// str=getstr(); //字符串输入
// printf("\nstr=%s\n",str);
// free(str);
// return 0;
// }



// #include <iostream>
// #include <list>
// using namespace std;
// class Person
// {
// public:
// char*name;
// int gender;
// };
//
// class Student:public Person
// {
// public:
// int grade;
// Student(char *Name,int Gender,int Grade)
// {
// name=Name;
// gender=Gender;
// grade=Grade;
// }
// };
//
// class Teacher:public Person
// {
// public:
// Teacher(char *n,int g)
// {
// name=n;
// gender=g;
// }
// public:
// list <Student> student;
// };
//
// class Printer
// {
// public:
// void printStudent(Student s)
// {
// cout <<"student:" <<endl;
// cout <<"\t Name:" <<s.name <<endl;
// if(s.gender==0)
// cout <<"\t Gender:" <<"female" <<endl;
// else
// cout <<"\t Gender:" <<"male" <<endl;
// cout <<"\t Grade:" <<s.grade <<endl;
// }
// void printTeacher(Teacher s)
// {
// cout <<"Teacher:" <<endl;
// cout <<"\t Name:" <<s.name <<endl;
// if(s.gender==0)
// cout <<"\t Gender:" <<"female" <<endl;
// else
// cout <<"\t Gender:" <<"male" <<endl;
// }
// };
//
// int main()
// {
// Teacher teacher("Johnny",1);
// Student student1("Catherine",0,1);
// Student student2("peter",1,2);
//
// teacher.student.push_back(student1); //从后面向list容器中添加数据
//
// teacher.student.push_back(student2);
//
// student1.grade=2;
// student2.grade=3;
//
// Printer printer;
// printer.printTeacher(teacher);
// list <Student>::iterator itr=teacher.student.begin();
// for(;itr!=teacher.student.end();itr++)
// {
// printer.printStudent(*itr);
// }
// return 0;
// }

// #include <iostream.h>
//
// void jiaohuan(int x,int y)
// {
// int temp;
// temp=x;
// x=y;
// y=temp;
// cout<<x<<'\t'<<y<<endl;
// }
//
// void zhizhen(int *x,int *y)
// {
// int temp;
// temp=*x;
// *x=*y;
// *y=temp;
// cout<<*x<<'\t'<<*y<<endl;
// }
//
// void shengming(int &x,int &y)
// {
// int temp;
// temp=x;
// x=y;
// y=temp;
// cout<<x<<'\t'<<y<<endl;
// }
//
// void shuzu(int a[],int b[])
// {
// int temp[1];
// temp=a;
// a=b;
// b=temp;
// cout<<a[0]<<'\t'<<b[0]<<endl;
// }
// void main()
// {
// int a=5,b=6;
// jiaohuan(a,b);
// cout<<a<<'\t'<<b<<endl;
// zhizhen(&a,&b);
// cout<<a<<'\t'<<b<<endl;
// shengming(a,b);
// cout<<a<<'\t'<<b<<endl;
// int c[1],d[1];
// c[0]=5;d[0]=6;
// shuzu(c,d);
// cout<<c[0]<<'\t'<<d[0]<<endl;
// }

// #include <iostream>
//
// int ma(int);
//
// int main()
// {
// using namespace std;
// int lang;
//
// cout <<"Enter a namber for lang:_____\b\b\b\b";
// cin>>lang;
// cout <<lang <<" lang is" <<ma(lang) <<"ma\n";
// return 1;
// }
// int ma(int l)
// {
// using namespace std;
// // int l;
// int m;
// m=l*200;
// return m;
// }


// union
// {
// int i;
// char x[2];
// }a;
// #include <cstringt.h>
// void main()
// {
// unsigned int j;
// unsigned char mil=0x00,cs[6];
// float md,x=x=1095216660480.0;
//
// md=123.386;
// if(md==x)
// cs[0]=cs[1]=cs[2]=cs[3]=cs[4]=cs[5]=0xff;
// else
// {
// for(;md<x;)
// {
// md=md*2;
// mil++;
// }
// md=md/2;
// mil--;
// cs[5]=mil;
// j=(int)(md /(65536.0*65536.0));
// cs[0]=0x80&j;
// md=md-j*65536.0*65536.0;
// j=(int)(md/(256.0*65536.0));
// cs[1]=j;
// md=md-j*256.0*65536.0;
// j=(int)(md/65536.0);
// cs[2]=j;
// md=md-j*65536.0;
// j=(int)(md /256.0);
// cs[3]=j;
// md=md-j/256.0;
// j=(int)md;
// cs[4]=j;
// }
// printf("123.386的十六进制表示为");
// printf("%x%x%x%x%x%x%x%x%x%x",cs[0]/16,cs[0]%16,cs[1]/16,cs[1]%16,cs[2]/16,cs[2]%16,cs[3]/16,cs[3]%16/16,cs[4],cs[4]%16);
// printf("小数位数为%x%x",cs[5]/16,cs[5]%16);
// }

// #include <iostream>
// using namespace std;
//
// void main(void)
// {
// enum egg {a,b,c};
// egg test; //在这里你可以简写成egg test;
// test = c;
// cout<<test;
//
// }

#include <windows.h>
#include <iostream.h>

// DWORD WINAPI ThreadProc1(
// LPVOID lpParameter // thread data
// );
// HANDLE h_thread1;
// void main()
// {
//
// h_thread1=CreateThread(NULL,0,ThreadProc1,NULL,0,NULL);
// CloseHandle(h_thread1);
// }
//
// DWORD WINAPI ThreadProc1(
// LPVOID lpParameter // thread data
// )
// {
// WaitForSingleObject(h_thread1,INFINITE);
// cout<<"lihaia";
// return 0;
#include <conio.h>
#include <iostream.h>
#include <string.h>
#include <stdio.h>
int main()
{
int i=0/*1初始化i,否则不能直接a[i]访问*/,s,t,j,p;
char a[1000];
cout <<"请输入一篇文章" <<endl;
gets(a);
puts(a);
// if(a[i]>='a'&&a[i]>='A'&&a[i] <='z'&&a[i] <='Z')//确定第一个字符是否为标点
if (a[i]>='a'&&a[i]<='z'|| a[i]>='A'&&a[i] <='Z')//2判断分小写和大写
i=0;
else
i=1;
t=i;//第一个单词起始位置
s=0;
// cout <<t <<endl;
for(;i<=strlen(a);i++)
{
if(a[i]>'z'&&a[i]>'Z'||a[i] <'a'&&a[i] <'A')//确定一个单词结束 /*3和2同样的问题*/
{
s=s+1;
j=i;//记录结束时位置
}
else continue;//未遇到空格或标点(单词没结束)进入下一次循环
for(p=t;p <j;p++)//输出刚确定的单词
{
cout <<a[p];
}
t=j+1;//下一个单词的起始位置
cout <<endl;
}
// if(a[i-1]>='a'&&a[i-1] <='z'||a[i-1]>='A'&&a[i-1] <='Z') //这句注释掉后如果最后一个标点多于1个就会出现问题
cout <<"共有" <<s-1 <<"个单词" <<endl;

return 0;
}
棋盗 2009-06-20
  • 打赏
  • 举报
回复
晚上熄灯了,今天补
本以为半个小时搞定,结果调了近两个小时,还没调出来
黑眼圈也出来了
#include <iostream.h>
#include<string.h>
#include<stdio.h>
int main()
{
int i,s,t,j,p;
char a[1000];
cout<<"请输入一篇文章"<<endl;
gets(a);
puts(a);
if(a[i]>='a'&&a[i]>='A'&&a[i]<='z'&&a[i]<='Z')//确定第一个字符是否为标点
i=0;
else
i=1;
t=i;//第一个单词起始位置
s=0;
cout<<t<<endl;
for(;i<=strlen(a);i++)
{
if(a[i]>'z'&&a[i]>'Z'&&a[i]<'a'&&a[i]<'A')//确定一个单词结束
{
s=s+1;
j=i;//记录结束时位置
}
else continue;//未遇到空格或标点(单词没结束)进入下一次循环
for(p=t;p<j;p++)//输出刚确定的单词
{
cout<<a[p];
}
t=j+1;//下一个单词的起始位置
cout<<endl;
}
if(a[i-1]>='a'&&a[i-1]>='A'&&a[i-1]<='z'&&a[i-1]<='Z')
cout<<"共有"<<s<<"个单词"<<endl;

return 0;
}
运行时错误
"0x0040ff4a"指令引用的"0xccdfc850"内存。该内存不能为"read"。
各位大大帮忙看看
ameyume 2009-06-19
  • 打赏
  • 举报
回复
顶,按照楼上的方法来吧
光宇广贞 2009-06-19
  • 打赏
  • 举报
回复
那么扫描单词的时候太简单了,两个单词分隔符之前的一块,就是一个单词,其实 split 函数,就是这么实现的。

一维数组,一次遍历便可以完成。

我想我已经说得够清楚的了。
光宇广贞 2009-06-19
  • 打赏
  • 举报
回复
楼主可以自己写一个 Split 函数,如我所述的那个,提供一个接口,参数表是“单词的分隔符列表”,空格和标点都加入其内。返回的是单词的数组,也可以是单词的个数。

或者楼主可以自己参考 string.Split 函数来做。

我记得C++库里面有 Split 函数,楼主查一下 CSTRING吧。
光宇广贞 2009-06-19
  • 打赏
  • 举报
回复
放到C#下太TMD的简单了:


string fuck = "Fuck lady, lady fuck. Oh my fuck god! Give me a fuck!";

string[] Fuck = fuck.Split ( new char [] { ' ', ',', '.', '!' } );

Fuck.Length 就是单词的个数。


其实楼主完全可以按照这个思路来做。
adventurelw 2009-06-19
  • 打赏
  • 举报
回复
空格照常录入(换行符也转换成空格),如果需要输出单词的话,不需要的话则算了
标点判断用ispunct(ch),是标点的话则舍去。
coolyama 2009-06-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xmrforever 的回复:]
就判断空格和标点符号就可以了啊
遇到空格或者标点符号,单词的计数变量就自加一次
结束条件可以自己设计
比如输入一个@结束输入
[/Quote]
不能就判断空格和标点符号。
"i love csdn!"
这样的话不是数成5个单词了?(2个引号,2个空格,一个感叹号)
  • 打赏
  • 举报
回复
[Quote=引用楼主 tianhang2009 的帖子:]
录入一篇英文文章(存放在字符数组a【n】中),统计单词个数,
假定这段文章不超过1000个字符,单词不超过240个。
请自我设计录入结束条件。
这道题要用指针的一维数组做哦 我想的是每个单词之间都有空格 可是文章都有标点的 怎么排除非单词 我想不懂
希望大虾给做个程序自学一下 最好是完整的这道题的程序 谢谢了!! !

orz!!!!
[/Quote]

遇到非英文字母,就认为一个单词结束啊。
1st这些数字除外,或者可以认为遇到非英文字母(包括大小写,和数字),其他的都认为是单词结束。

不难吧
xmrforever 2009-06-19
  • 打赏
  • 举报
回复
就判断空格和标点符号就可以了啊
遇到空格或者标点符号,单词的计数变量就自加一次
结束条件可以自己设计
比如输入一个@结束输入
pathuang68 2009-06-19
  • 打赏
  • 举报
回复
ameyume 2009-06-19
  • 打赏
  • 举报
回复
Orz
囧rz

你可以先做个不计算标点的,遇到标点就舍去,或者录入时不录入标点
然后一步步再完善,计算标点等
arong1234 2009-06-19
  • 打赏
  • 举报
回复
作业应该自己做,不应该别人帮忙。如果你连这个都不做,怎么可能学好编程
tianhang2009 2009-06-19
  • 打赏
  • 举报
回复
对了 题目补充一下:我还想把单词依次输出来
棋盗 2009-06-19
  • 打赏
  • 举报
回复
快停电了
wuleibilly3 2009-06-19
  • 打赏
  • 举报
回复
LZ学过编译原理么 有章是说 词法分析的 你说的题目完全可以满足
把空格 标点符号 都看成 终结符,先把这些终结符预先保存在一个表里【一维数组】,
由于文章可能出现数字,所以不能算是单词,还有一些其它等不能算单词的,
构造个简单的状态机
读入一个字符时判断时候为字母,是字母则继续判断下一个,当遇到终结符的时候,一个单词截取完成,

1.截取字符-》2.判断是否为字符,如果是非法字符则忽略这个字符继续下一个-》3.是的话循环判断第二步-》4.直到遇到终结符截取一个单词完成
-》5.计数器+1-》继续取下一次的判断

没办法 画不了图 讲究下
至善者善之敌 2009-06-19
  • 打赏
  • 举报
回复
我给个反向的思路给你,具体你自己写了

比如 I am a student,you are a teacher.是一句话

你统计一下空格和标点符号一共是8个,那单词就是8个。

又比如 "I am Addy,Who is there?"

有两个"这样的符号你统计的时候可统计成一个,并且?"连用的时候也统计成一个,那么空格和标点一共为6个,单词也是6个,

仅供参考!!
加载更多回复(1)
源码下载地址: https://pan.quark.cn/s/a4b39357ea24 Altium Designer 18是一款功能丰富的电子设计自动化工具,其集成了电路原理图绘制、PCB布局规划、三维视图展示、电路仿真分析以及生产文件生成等多项核心功能,为电子工程师们提供了一个全面的硬件设计解决方案。该软件的官方中文指导材料系统地阐述了从项目初始阶段到最终完成的全过程操作方法。 在“AD18 官方中文指导材料”中,使用者可以掌握以下核心内容要点: 1. **系统配置与界面认知**:熟悉Altium Designer 18的工作平台,涵盖菜单选项、工具栏配置、工作区域安排,以及个性化工作界面的设定方法。 2. **项目创建流程**:掌握如何建立新的项目工程,包括工程参数配置、项目模板选取,以及项目文件的添加操作。 3. **电路图绘制技术**:学习电路原理图的绘制流程,包括元件库的维护管理、元件放置技巧、连接线路绘制、属性编辑操作,以及网络表的自动生成方法。 4. **元件库构建与管理**:了解如何建立自定义元件库,执行元件的导入与导出任务,以及利用Altium Designer自带的元件资源库。 5. **PCB布局设计方法**:掌握PCB设计的基本准则,如元件布局策略、布线技巧、层叠结构调整、布线规则优化,以及冲突检测与短路处理技术。 6. **设计规范与约束条件**:理解设定设计规范和电气约束条件的关键性,包括间距参数设定、焊盘尺寸规格、过孔尺寸要求等,以及运用规则检查进行设计验证的流程。 7. **三维模型整合应用**:学习如何将三维模型与PCB设计内容相结合,以实现更为直观的机械配合验证。 8. **电路性能仿真技术**:掌握使用Altium Des...
源码链接: https://pan.quark.cn/s/a4b39357ea24 ### 接口测试知识要点说明 #### 一、接口测试的定义及分类 1. **概念阐释**: - 接口测试作为软件测试的关键环节,主要对系统之间的交互点进行验证。 - 它旨在核实接口的正确性、稳定性和功能性,保障各个系统组件能够依照预期执行交互操作。 2. **实施情境**: - 适用于多系统联合开发的环境。 - 适用于包含多个子系统的复杂应用系统开发过程。 3. **适用范围**: - 为其他系统提供支持的底层基础架构系统。 - 负责协调中心服务的系统架构。 4. **分类标准**: - **模块接口测试**:通常作为单元测试的一部分,适用于独立构建的功能模块。 - **Web接口测试**: - **服务端接口测试**:针对客户端与服务器端之间的接口进行验证。 - **外部接口测试**:对第三方提供的接口进行测试,例如支付平台提供的授权登录接口。 5. **测试角度**: - **接口功能验证**:核实接口功能是否满足预期要求。 - **接口性能评估**:衡量接口的处理能力及响应时间。 - **接口稳定性考察**:检测接口在长时间运行中的表现情况。 - **接口安全检测**:确保接口能够抵御非法访问或数据篡改。 6. **测试手法**: - **参数细致测试**:深入测试接口的输入参数和输出结果。 - **场景模拟测试**:依据实际业务场景进行测试验证。 #### 二、接口测试的详细流程 1. **测试规划**: - 明确测试范围、目标及所需资源。 - 规划测试策略,选择适宜的工具和技术手段。 2. **测试用例设计**: - 依据需求文档和接口规格文档设计测试用例。 - 覆...
内容概要:本文研究基于遗传算法(GA)与粒子群算法(PSO)相结合的无人机三维路径规划方法,旨在解决无人机在复杂三维环境中避障与路径优化的关键问题。通过构建包含障碍物、威胁区域等约束的三维仿真环境,系统实现了GA与PSO两种智能优化算法的Matlab代码,并对其在路径规划中的性能进行全面对比分析,重点关注路径长度、飞行安全性、算法收敛速度等核心指标。研究充分利用GA的全局搜索能力与PSO的快速局部收敛特性,提出一种混合优化策略,有效克服单一算法易陷入局部最优或收敛缓慢的缺陷。文中不仅详细阐述了算法的设计流程、数学模型与实现细节,还提供了完整的仿真结果,验证了所提混合方法在复杂动态场景下的优越性、有效性和鲁棒性,为无人机自主导航提供了可靠的理论依据和技术方案。; 适合人群:具备一定Matlab编程基础和优化算法理论知识,从事无人机系统设计、智能控制、路径规划、人工智能应用等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于城市峡谷、山区、灾害救援等复杂三维环境中的无人机自主避障与最优任务路径规划;②为智能优化算法(GA、PSO及其混合策略)的学习、性能对比与工程化应用提供详实的实践案例和代码参考;③服务于高校科研教学、算法原型快速复现、以及在此基础上的进一步改进与创新研究。; 阅读建议:建议读者结合所提供的Matlab代码进行仿真运行与调试,深入理解两种算法的参数设置、适应度函数设计及路径生成机制,可通过修改环境地图、增加动态障碍物或调整优化目标函数等方式进行扩展性研究,以深化对算法本质和应用场景的理解。
内容概要:LTK8870S是一款单通道H桥有刷直流电机驱动器,支持6.5V至20V工作电压,具备3.0A峰值电流驱动能力,适用于打印机、家用电器及工业设备等机电一体化应用。该芯片采用PWM控制接口,可通过IN1和IN2逻辑输入实现电机正转、反转、滑行与制动等多种工作模式,并支持快衰减和慢衰减两种电流衰减方式以优化电机控制性能。器件集成电流调节功能,通过VREF引脚和外部检测电阻设定限流值,有效控制电机电流并降低系统功耗。同时具备低功耗休眠模式,在IN1和IN2均为低电平时自动进入,显著节省能耗。LTK8870S还集成了多重保护机制,包括VM欠压锁定(UVLO)、过温保护(TSD)、过流保护(OCP)及自动故障恢复功能,提升系统可靠性。其ESOP-8封装带裸露焊盘,利于散热,符合无铅环保标准。; 适合人群:电子硬件工程师、电机控制系统开发者、嵌入式系统设计人员,尤其适用于从事电机驱动电路设计的中级技术人员。; 使用场景及目标:①用于控制中小型有刷直流电机的正反转与调速;②应用于需要电流限制和节能休眠功能的电池供电设备;③作为工业自动化、智能家电或办公设备中的核心驱动模块;④帮助开发者理解H桥驱动、PWM调速、电流衰减模式及保护电路的设计原理。; 阅读建议:此资源技术细节丰富,建议结合典型应用电路图与电气参数表进行硬件设计参考,重点关注PWM控制逻辑、电流调节设置及保护机制的实现方式,并在实际应用中配合示波器调试输出波形与电流响应。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧