首页 > 解决方案 > 在字符串中查找按字典顺序排列的最大单词 - C 指针

问题描述

编辑:编辑了一切对不起误解。

我正在尝试编写一个函数来查找字符串中按字典顺序排列的最大单词

一个词是这样定义的:包含一个字母 - 可以使用 isalpha() - 不包含空格 - 可以使用 isspace()

如果 s = "He llo 世界"

s 包含以下单词:he、llo、wor、l、d。

要查找两个字符串之间的字典顺序最大的单词,我可以使用 strcmp。

函数原型是: char *biggestWord(char *s) 它应该返回字典上最大的单词。

我真的坚持了几个小时。这是我试图做的:

我被困在下一步该怎么做。如果连续有两个空格,我的算法想法甚至都行不通。

char *biggestWord(char *s) {
//We will find the first string and compare it to each one of the new strings
//We will keep the value of the higher string everytime
char *res;
char *temp;
int indexStart = 0; //Will contain the index of the first character to then store on temp
int indexEnd = 0; //Will contain the index of the last character to then store on temp
for(int i = 0; s[i] != '\0'; i++) {
    if(isspace(s[i])) {
        indexEnd = i - 1;
        temp = myStrCpy(s, indexStart, indexEnd); //Will extract the string using start and end index, and put it into temp
        indexStart = i+1;
    }
}

}

标签: calgorithm

解决方案


这是一个可能的解决方案:

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

char* biggestWord(char* s) 
{
    // Create a buffer for bigest word
    char* buf = calloc(strlen(s) + 1, sizeof(char));
    if (buf == NULL)
        return NULL;
    // Create a buffer for current word
    char* word = malloc(strlen(s) + 1 * sizeof(char));
    if (word == NULL)
        return NULL;

    int j = 0;
    for (int i = 0; s[i]; i++) {
        if (isspace(s[i])) {
            // We found end of word, replace the space by a nul byte
            strncpy(word, s + j, i - j);
            word[i - j] = 0; // nul terminate
            if (strcmp(buf, word) < 0) {
                // we got a bigger word according to strcmp()
                strcpy(buf, word);
                // skip remaining spaces
                while (s[i] && isspace(s[i]))
                    i++;
                // Remember where a word starts
                j = i;
            }
        }
    }
    free(word);
    return buf;   // cAller must call free()
}

void main(void)
{
    char* res = biggestWord("He llo wor l d ");
    if (res) {
        printf("Result=\"%s\"", res);
        free(res);
    }
}

biggestWord返回指向动态分配的字符串的指针,因此它必须由调用者释放。


推荐阅读