我正在编写一些代码,使用strtok()和strstr()函数查找给定字符串中每个单词的频率。我不知道我的代码有什么问题,因为屏幕上没有显示输出。任何人都可以帮助我吗?我是C编程的新手。
#include<stdio.h>
#include<string.h>
void main(){
char s[2222];
gets(s);
char *t,*y=s;
int count=0;
t=strtok(s," ,.");
while(t!=NULL)
{
count=0;
while(y=strstr(y,t))
{
y++;
count++;
}
printf("%s appeared %d times.\n",t,count);
t=strtok(NULL," ,.");
}
}
答案 0 :(得分:0)
strstr
搜索字词:"is"
中"is this a test?"
的出现次数为2,而不是1。strtok
;第一次搜索第一次出现,第二次用于后续出现,而不是strstr
:strtok
正在使用静态变量(请参阅此page中的注释)。<强> [编辑] 强>
一个初学者解决方案(run it):
#include<stdio.h>
#include<string.h>
#define MAXWORD 32
typedef struct
{
char word[MAXWORD];
int count;
} word_and_count_t;
#define MAXWORDCOUNT 1024
word_and_count_t table[MAXWORDCOUNT];
int table_size;
word_and_count_t* find( const char* word ) // range checking ignored
{
int i;
for ( i = 0; i < table_size; ++i )
if ( !strcmp( table[i].word, word ) )
return table + i;
strcpy( table[i].word, word );
table[i].count = 0;
++table_size;
return table + i;
}
void display()
{
for ( int i = 0; i < table_size; ++i )
printf( "%s - %d\n", table[i].word, table[i].count );
}
int main()
{
//
char s[] = "The greatness of a man is not in how much wealth he acquires, but in his integrity and his ability to affect those around him positively.";
//
for ( char* word = strtok( s, " ,." ); word; word = strtok( 0, " ,." ) )
find( word )->count++;
//
display();
return 0;
}
答案 1 :(得分:-3)
我认为主要的问题是你没有提供一个句子来获取这些词语。
char s[2222] = "Enter here the sentence you want to check.";