感谢各位指点,代码瑕疵望理解
Win11 dev-5.11
编译无报错,无警告
输入“to be or not to be”,打印出来的结果只显示“to :2”
去掉代码里的p[k]=NULL后,运行结果如图
各部分代码用意已用注释标出
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main(){
///提取字符串的单词,并将其储存在p数组中///
char c[1000];
gets(c);
char *p[1000];
int i = 0;
p[i] = strtok(c," ");
while(p[i] != NULL){
i++;///统计所有单词个数///
p[i] = strtok(NULL," ");
}
int count = 1; ///统计单个单词出现次数///
///统计部分的代码///
for(int j = 0;j < i;j++){
///基本的思路是,将数组里的前一个单词与之后的每一个单词进行比较,相同则count+1,并将相同的这两个单词的偏后者单词替换成NULL///
for(int k = 1;k < i;k++){
if(strcmp(p[j],p[k]) == 0){
count++;
p[k] = NULL;///测试过将此句去掉,得到的结果里,除了be外,所有单词的出现次数都不正常///
}
}
///该如果数组的元素不是null,就将该数组元素对应的单词和count次数打印///
if(p[j] != NULL ){
printf("%s : %d\n",p[j],count);
}
count = 1; ///重置count///
}
}