C++ 如何比较C或C+中数组上的内容+;

C++ 如何比较C或C+中数组上的内容+;,c++,c,arrays,comparison,word-count,C++,C,Arrays,Comparison,Word Count,基本上,我要寻找的是一种将数组(例如:短语)的内容设置为要比较的单个单词的方法。 因此,当用户输入数据时,我可以告诉他们有多少相同长度的单词 void main(){ char array[30]; int length, cont, array_tokens; printf("enter a phrase: "); scanf("%[^\n]s", array); //or gets(array); which ever one you like

基本上,我要寻找的是一种将数组(例如:短语)的内容设置为要比较的单个单词的方法。 因此,当用户输入数据时,我可以告诉他们有多少相同长度的单词

void main(){
     char array[30];
     int length, cont, array_tokens;
     printf("enter a phrase: ");
     scanf("%[^\n]s", array); //or gets(array); which ever one you like
     /*-------------------------
      *******magic happens*******
     ---------------------------*/
     for(int i=0; i<wordcount;i++)
         printf("%d word(s) with %d letters was entered", array_tokens, cont);//some sort of 
     system("pause");                                                      //counter which came 
}                                                                         //with the magic that 
                                                                         //happened before
void main(){
字符数组[30];
整数长度,cont,数组\u标记;
printf(“输入短语:”);
scanf(“%[^\n]s”,array);//或get(array);您喜欢哪一个
/*-------------------------
*******奇迹发生了*******
---------------------------*/

对于(int i=0;i您需要使用
分隔符(在本例中为空格字符“”)将句子拆分为
标记(在本例中为单个单词)。有多种方法可以做到这一点。一种很好的老式C方法是使用Robert Harvey建议的
strtok
,它是由C标准库提供的。它通过传入要拆分的字符串,后跟分隔符来拆分字符串


然后,要计算相似长度的单词,请尝试为不同的单词长度设置整数变量(或者更简单地说,在一种频率数组中,每个索引表示该长度的单词,其值是其出现次数的计数),循环遍历所有单词标记,当遇到某个长度的单词时,增加相应的变量。要获得C样式字符串的长度,请尝试
strlen

好的,strok()是解决此问题的一种方法。如果您的目标是提高效率(应该),您应该编写一个循环,循环遍历句子中的字母。计算自上一个空格以来遇到的非空格字符数,并在获得空格时更新n字母单词频率数组。我本来可以编写代码来实现这一点,但我不想剥夺您在编写时的满足感您自己的工作代码。:P

您可以拥有一个数组count,其中count[i]是长度i的字数

Set count to 0
Set t to 0
for(int i=0;i<given_phrase.length();i++)
{
 if(given_phrase[i]==' ')
 {
   count[t]++;
   t=0;
 }
 else
 {
   t++;
 }
}
将计数设置为0
将t设置为0

对于(int i=0;我想知道到底发生了什么神奇的事情吗?我希望我能对每个评论投一次以上的赞成票,即RobertHarvey@maverick1989正如罗伯特·哈维评论的那样,关于所发生的魔法,我一直在思考斯特托克,但我不知道斯特托克到底是如何工作的:/@user2529905-“我不知道strtok是如何工作的”-这就是您阅读手册的原因。因此,要将字符串分成单个单词,我可以使用:
tokens=strtok(array,“,-”);while(token!=NULL){printf(“%s\n”,token);token=strtok(NULL,“,-”;)
但是我如何在这里计算单词?使用
for
循环遍历每个单词,例如
for(unsigned int I=0;I
。每次迭代计算当前单词的长度:
int wordLength=strlen(单词[I])
,然后增加单词频率数组的相应元素,如
wordFrequencies[wordLength]++
。因此基本上可以是:`void main(){
int count[]={0};`int t=0,length;`char array[30];`char*标记;`length=strlen(数组)“`tokens=strtok(数组,,-”;`for(inti=0;i@David:我认为count array需要指定一个大小。谢谢,这很有帮助!我将尝试这样做,我对编程有点陌生,我希望随着我了解的越来越多,我能获得更多的问题解决能力。再次感谢!