存疑201503(已解决)空行

编程入门 行业动态 更新时间:2024-10-28 17:22:42

存疑201503(已解决)<a href=https://www.elefans.com/category/jswz/34/1770377.html style=空行"/>

存疑201503(已解决)空行

/
题目:统计词语
输入一段含标点的英文语段(若干行,以文件终止符EOF结束,在命令窗口中以ctrl+z表示),保证每行输入的单词都是完整的,词与词之间至少会出现空格或标点,且词不会被换行所分割。
保证输入的所有字母都是小写,且每行输入的长度不会超过100000,输入的单词总数不会超过1000个,每个单词的长度不超过100.
统计这段话中出现的所有单词,要求按字典顺序输出词语,且不能重复,每输出一个词换一行。
测试用例1:
输入:
we are family,
you and me are family,you are my sister.
输出:
and
are
family
me
my
sister
we
you
测试用例2:
输入:
dgjgfjjjfljfdirign!
输出:
dgjgfjjjfljfdirign

问题1:
strcat连接的是字符串,’\0’是字符,所以不可以。换成" “双引号”\0"结果是乱码,所以粘贴’\0’时,老老实实用len=strlen(str[i]);str[i][len]='\0'; 吧。但可以粘贴字符,需引用地址。strcat(str[i],&ch);//应用地址&

strcat(str[i],'\0');综上,这条语句的问题。
换成 len=strlen(str[i]);str[i][len]='\0';输入就没问题了

问题2:
首先str[i]是字符串,不能与字符比较。其次char 数组只能用strcmp()来比较,string才可以用!=,>=,<等符号比较。if(!i&&strcmp(str[i],"\0")!=0) printf("%s\n",str[i]); 改成strcmp()便正确。

if(!i&&str[i]!='\0') printf("%s\n",str[i]);//存疑 
//经检验:确实加上后会多一行空行 ,但上一行明明是判空不输出,这是为什么?

问题3:刚才代码外多了个大括号,报错n does not name a type.

/* for(i=0;scanf("%s",str[i])!=EOF;i++){int len=strlen(str[i]);if(!judge(str[i][len-1])) str[i][len-1]='\0';}*/

问题4:
我好像最初是按空格分割单词的,所以会出现以下错误。

//需改正,以上会把family,you读作一个单词,并且识别不出来。
//所以需要按字符读入???是的 

我的代码:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#include<string.h>
void swap(char a[],char b[]){char temp[110];strcpy(temp,a);strcpy(a,b);strcpy(b,temp);
}
int compare(char str1[],char str2[]){int temp=strcmp(str1,str2);return temp;
}
int randPartition(char str[][110],int left,int right){int p=round(1.0*rand()/RAND_MAX*(right-left)+left);swap(str[p],str[left]);char temp[110];strcpy(temp,str[left]);while(left<right){while(left<right&&compare(str[right],temp)>0) right--;strcpy(str[left],str[right]);while(left<right&&compare(str[left],temp)<=0) left++;strcpy(str[right],str[left]);}strcpy(str[left],temp);return left;
}
void quicksort(char str[][110],int left,int right){if(left<right){int pos=randPartition(str,left,right);quicksort(str,left,pos-1);quicksort(str,pos+1,right);}
}
void sort(char str[][110],int n){quicksort(str,0,n-1);//二维字符串的快速排序 
}
int judge(char ch){//判断最后一位 if((ch<='z'&&ch>='a')||(ch<='Z'&&ch>='A')) return 1;else return 0;
}
int main(){char str[1010][110],ch;int i,n,len;for(i=0;scanf("%c",&ch)!=EOF;i++){if(judge(ch)){while(judge(ch)){strcat(str[i],&ch);//应用地址& scanf("%c",&ch);}len=strlen(str[i]);str[i][len]='\0';//输入结束,这个应该会执行吧?会的。 }//其实我这个是符合条件才赋值结束符的。所以不会出现空行 }n=i;//存疑//strcat(str[i],'\0');综上,这条语句的问题。//换成 len=strlen(str[i]);str[i][len]='\0';输入就没问题了 sort(str,n);printf("a\n%s\nb",'\0');//经检验,正常输出并不包括空行 for(i=0;i<n;i++){if(!i&&str[i]!='\0') printf("%s\n",str[i]);//存疑 //经检验:确实加上后会多一行空行 ,但上一行明明是判空不输出,这是为什么? if(i&&strcmp(str[i],str[i-1])==0) continue;//去重 else printf("%s\n",str[i]);}return 0;
}

更多推荐

存疑201503(已解决)空行

本文发布于:2024-02-25 02:44:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1697521.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:空行

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!