CP1024 单词切分以及一些拓展题
又是一道小题,(但是也不是空格作为分割符,范围更广)本质上还是连续字符串,又考了判断嵌套啊
俺的做法:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main()
{
char a[100];//用于存储刚开始的字符串
char b[100][100];//用于存储切分出来的单词
int k=0,j=0;//计数器
gets(a);
for(int i=0; a[i]!='\0'; i++) //字符串遍历
{
if(a[i]==' '||a[i] =='1'||a[i] =='2'||a[i] =='3'||a[i] =='4'||a[i] =='5'||a[i] =='6'||a[i] =='7'||a[i] =='8'||a[i] =='9'||a[i] =='0')//判断是不是字母
{
if(a[i+1]==' '||a[i+1] =='1'||a[i+1] =='2'||a[i+1] =='3'||a[i+1] =='4'||a[i+1] =='5'||a[i+1] =='6'||a[i+1] =='7'||a[i+1] =='8'||a[i+1] =='9'||a[i+1] =='0')//判断第二个是不是字母,防止误杀友军
{
continue;//是的话过掉,下一个
}
else
{
k++;//反之则另起一行继续存储
}
}
else//存储单词
{
if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))//防止把标点放进去
{
b[k][j]=a[i];//存储单词
j++;
}
}
b[k][j]='\0';//加上结束符,很重要,不能少
}
int y;
for(int i=0; i<=k; i++)
{
for(y=0; y<j; y++)
{
if(b[i][y]!='\0')//这个是去掉前面的多余的东西
{
printf("%c",b[i][y]);
}
}
printf("\n");
}
return 0;
}
很有意思的题目,但我的方法还是太笨了,下次再试试指针之类来做,还有二维字符串也得试试。
哦对了
该代码稍微改一下还可以做单词缩写哦~(笑)
补充代码如下:
int y;
for(int i=0; i<=k; i++)
{
for(y=0; y<j; y++)
{
if(b[i][y]!='\0')
{
if(b[i][y]>='a'&&b[i][y]<='z')
{
printf("%c",b[i][y]-32);
break;
}
if(b[i][y]>='A'&&b[i][y]<='Z')
{
printf("%c",b[i][y]);
break;
}
}
}
}
posted on 2023-01-05 22:55 harumakigohan 阅读(71) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)