按行输入字符串,从中摘出词并建立词表。当词表中的词满20个或发现名为QUIT的词时,显示出词表,程序结束。词表中不得有重复的词,每个词长度不超过10.#include<iostream>#include<string>using namespace std;void main(){char s[11],dict[20][11];int i=0,j;while(i<20){cin>>s;if(!strcmp(s,"QUIT"))break;for(j=0;j<i;j++)if(!strcmp(s,dict[j]))break;if(j==i){strcpy(dict[i],s);i=i+1;} }for(j=0;j<i;j++)cout<<dict[j]<<endl;}一,其中char s[11],dict[20][11];为什么是s[11],不是长度不超过10吗,为什么不是s[9],从s[0]开始算呢。二,if(!strcmp(s,"QUIT"))break;为什么前面要有“!”才表示为如果相等就跳出。此句为什么不是表示如果不相等就跳出。期待解释
1. 字符串变量规定其数组最后一位为'/0',是字符串结束标志.那么单词长度不超过10的话,那么最后还有一位'/0'即11位.2. strcmp(char* a,char* b)函数的返回值规定如下若字符串a的ASCII码值大于字符串b,返回其差值(正数)若字符串a的ASCII码值小于字符串b,返回其差值(负数)若字符串a的ASCII码值等于字符串b,返回0那么,s == "QUIT"时,strcmp(s,"QUIT") = 0这时候,要想if条件成立(即括号内表达式为非零)必须加一个"!",让!strcmp(s,"QUIT") = 1这样就满足if条件,实现break 跳出.