需要帮助来确定按空格分隔的最长字符串

时间:2016-04-26 19:47:23

标签: c

我需要创建一个代码,用于标识由空格分隔的最长字符串。如果有相同长度的字符,请同时写下它们。

例: 输入= Java流汽车树 输出= Java流树

她是我写的代码

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char cuv[100], big[100];
    int i;
    printf("Scrieti cuvintele\n");
    gets(cuv);
    cuv[0] = big[0];
    for(i = 0; cuv[i] = '/0'; i++){
        if(cuv[i] > big[i]){
            big[i] = cuv[i];
        }
    }
    printf("%s", big);

    return 0;
}

问题是我不太清楚char是如何工作的。所以我对如何做有一点线索。我问你如何使用char set来以特定的方式计算字符串。

2 个答案:

答案 0 :(得分:0)

这是一个非常简单的解决方案。尝试理解代码。请注意,代码使用#include<string.h>中的一些函数。因此,在完成代码之前,请浏览string.h头文件并了解它提供的标准函数。

无论如何,这是一个非常基本的程序,(随意根据您的需要进行修改)

#include<stdio.h>
#include<string.h>
#define MAX 256

int main(){

      char input[MAX],*tmp=NULL;
      char *word_list[MAX],*word=NULL;
      int flag[MAX];
      int i=0,index=0,m=0,largest_len=0;

      //Get Input From User
      printf("Enter Input:\n");
      fgets(input,MAX,stdin);

      //If using fgets then use strchr() to locate '\n' and replace it with '\0'(null terminating char)
     if((tmp=strchr(input,'\n')) != NULL){
        *tmp='\0';
      }

      //Use strtok() function to split the sentence/input into words separated by space
     //and store them in an array of char pointers(or more like array of strings)
     word = strtok(input," ");
     word_list[index] = word;
     index++;
     while(word != NULL && i<MAX){
         word=strtok(NULL," "); 
         if(word != NULL){
            word_list[index] = word;
            index++;
         }  
     }

     //find the word with the largest lenght
     for(i=0;i<index;i++){
        if(strlen(word_list[i]) >= largest_len){
           largest_len = strlen(word_list[i]);
        }
     }

     //Then store the index of words which have their lenght equal to the largest lenght
    for(i=0;i<index;i++){
       if(strlen(word_list[i]) == largest_len){
          flag[m] = i;
          m++;
       }
     }

     //Print the largest words
     m=0;
     printf("Largest Word('s):");
     for(i=0;i<index;i++){
        if(flag[m] == i){
           printf("%s ",word_list[i]);
           m++;
        }
     }

     return 0;
}

答案 1 :(得分:-1)

您发布的代码似乎与您尝试做的事情几乎没有关系 - 以至于它无法解决问题。

那就是说,把你的“大”(完整)问题想象成一系列较小的问题;每个较小的问题比单个较大的问题更容易解决。你的问题似乎是:

1)输入您的原始数据。

2)将原始数据拆分为单词。您可以手动浏览数据以查找空格并在找到它们时做您认为合适的事情,或者您可以弄清楚如何使用strtok()为您解析数据。考虑到您的语言理解,手动操作可能是一种更好的学习体验。

3)确定集合中最大单词的长度。

4)浏览整个集合并输出长度等于最大长度的每个单词。

对于问题1,您似乎已经完成了这项工作(但请注意人们为您提供的更好方法的建议)。

问题2可能是最具挑战性的。有几种方法可以解决它。我不打算提供解决方案,但这个片段是一个小小的开始:

for (i = 0; cuv[i] != '\0'; ++i) {
    /* do something */
}

注意for循环的中期;它没有对cuv[i]进行赋值(我指出这一点,因为在你发布的程序中,你正在进行一个赋值,这实际上不是你想要的。)它是将字符与标准C字符串终止进行比较。 / p>

你需要在循环中查看每个字符,并决定是增加当前单词,结束前一个单词,开始一个新单词,还是只跳过重复的空格。

您需要在某处存储指向每个单词的指针,以便第3步和第4步可以使用完整的单词集。

请注意,可以在您执行此操作时执行第3步,但您现在不应该这样做。它会使你的程序更有效率,但它将这些步骤合并在一起并且在学习时,你不需要它。

问题3要求您注意strlen(const char *s)将返回s的长度,其中s是正确终止的C字符串。

要解决此问题,您只需遍历完整的单词并检查每个单词的长度;如果长度大于先前的最大值,您将增加存储的最大值。类似的东西:

unsigned int maxLength = 0;
for (i = 0; i < numberOfWords; ++i) {
    if (strlen(word[i]) > maxLength)
        maxLength = strlen(word[i]);
}

最后,对于第4步,您将再次遍历您的单词列表,决定打印出哪些单词。类似的东西:

for (i = 0; i < numberOfWords; ++i) {
    if (strlen(word[i]) == maxLength)
        printf("%s\n", word[i]);
}