神奇 把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