繁体   English   中英

在字符串中查找按字典顺序排列的最大单词 - C 指针

[英]Find Lexicographically Greatest Word in a String - C Pointers

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

我正在尝试编写 function 来查找字符串中字典顺序上最大的单词

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

如果 s = "He llo 世界"

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

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

function 原型是: 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;
    }
}

}

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

#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返回一个指向动态分配的字符串的指针,因此它必须由调用者释放。

c从以“

[英]c find exact word from string starting with "

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM