分析出一个字符串中的单词
本意是想分析出一个字符串中的单词,每个单词一行,如果字符串里有很多不属于单词的,总是有太多的换行。希望指正!!!!!!
#include char str[1024]; void strtoken (char *str) { int i; for (i=0;str[i];i++) { if(((str[i]<='z'&&str[i]>='a')||(str[i]<='Z'&&str[i]<='A')) &&(str[i]!=' ')&&(str[i]!='*') ) { printf("%c",str[i]); } /* if(str[i++]==' ') { continue; // else printf("n"); } */ else printf("n"); } return; } int main(void) { printf("please input a string :n"); fgets(str,1024,stdin); strtoken(str); return 0; }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(20)
请高手优化此程序,要求单词换行输出,但不空行。
继续关注
引用来自“罗光盛”的答案
如你所说,用你的程序你话也可以这样改,将所有你要替换的字符换成'n'
@梦飞翔宇内: 你再定义个中间数组,再将原数组变换后的值赋值给中间数组,在赋值时比较看看有没有重复的'n',把它不赋值就行了嘛。
罗大哥,您好,我想请教一下,在您修改的这个程序中,如何剔除for循环中的过多的换行呢?
谢谢您了,不过还有一点不足,就是如果多个不匹配的字符在一起,那么输出的换行就太多了,
在您的帮助下,我有了进一步的了解啦!感谢您的指点!
插入代码时不要直接把代码粘贴到编辑器里,而是点击编辑器右上的“编辑上插入程序代码或脚本”。(在插入表情符号的右边 ),在弹出的对话框里选择你要插入的语言类型,粘贴代码就好了。
我也发现了提交的程序没有排版,但是,我不知道该怎么操作的,求教高手,程序在评论和发布是如何进行排版?
这个程序不能达到分析出单词的效果,输出的j是统计除了单词以外的字符的个数吧?
@梦飞翔宇内: 你是想怎样分析出单词呢?我以为你是想逐个的输出在第一次输入的字符串中剔除第二次输入的字母呢?
@罗光盛: 单词是由字母组成的,除字母以外的字符都要剔除的,您改的是实现了剔除了空格,但是其中的!不是单词,却依然被输出了。还有一点是,您在控制输出时单词全部在一起,组成了一个长串了。
不解释
我用gcc编译一下,出现了bool庅没有声明 anaylze.c: In function ‘strtoken’: anaylze.c:8:6: error: ‘bool’ undeclared (first use in this function) anaylze.c:8:6: note: each undeclared identifier is reported only once for each function it appears in anaylze.c:8:11: error: expected ‘;’ before ‘bIsReturn’ anaylze.c:22:14: error: ‘bIsReturn’ undeclared (first use in this function) anaylze.c:22:26: error: ‘false’ undeclared (first use in this function) anaylze.c:37:26: error: ‘true’ undeclared (first use in this function) 但是我使用int 类型就可以消除这些提示,请问这是什么原因呢?
如果 if(!bIsReturn)也不行的话,就改为 if (iReturn == 0)
@梦飞翔宇内: bool类型是c++里面定义的,c是不支持bool类型的,如过想使用bool类型用g++编译源文件。
没有经过严格测试,这样是不是你想要的结果:
不是很明白lz的意义是什么。不过,我觉得这句有问题:
((str[i]<='z'&&str[i]>='a')||(str[i]<='Z'&&str[i]<='A'))
或号后面应该是 小于等于Z,大于等于A吧。
看程序意义应该是解析输入字符串中的字母,如果是连续英文字符,输出。
如果是空格或“*”,输出换行吧。
如果是为了解决换行太多的问题,你可以进行判断,如果当前需要输出换行,则检测它前面是否已经有换行。如果有,则不输出即可。