北航2015_短文输出单词

神奇 把c转换成小写居然 又把原本的c传过去了 醉了 这种情况会产生大写字母存在且排在小写字母前的错误 另外有关字符的函数加 <ctype.h>

在这里插入图片描述

scanf("%c",&c) 第十遍忘写&了

有关添加的操作 一定要在前面加 查找 没找到再添加

if(w[0]==0) continue; 特别重要 防止连续的非字母字符 使 传入空串

ws=0;flag=true 前者让获得单词重新开始 后者让这个flag恢复初值,不然一旦有个单词使它变为false他就一直是false

除了第一条都是简单的错误,醉了全是逻辑错误,代码不敲注意事项全忘了

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<algorithm>
using namespace std;
struct word{
	char wo[40];
	bool operator < (word S){
		int cmp=strcmp(wo,S.wo );
		return cmp<0;
	}
}buf[1000];
int main(){
	char c;
	int size=0;
	char w[40];
	int ws=0;
	bool flag=true;
	while(scanf("%c",&c)!=EOF){
		if(isalpha(c)){
			
			w[ws++]=tolower(c);
		}else{
			if(w[0]==0) continue;
			w[ws]=0;
			for(int i=0;i<size;i++)
			if(strcmp(w,buf[i].wo)==0){
				flag=false;
			}
			if(flag==true){
				strcpy(buf[size++].wo,w);
				ws=0;
			}else{
				ws=0;
				flag=true;
			}
		}
	}
	sort(buf,buf+size);
	for(int i=0;i<size;i++)
	printf("%s\n",buf[i].wo);
}

在这里插入图片描述
注意换行之后 ctrl+z 表示eof

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值