我需要在C中编写一个获取“ char * str”的函数(void),该字符串包含定界符(char * delimiters =“?:,-space”)。该函数需要更新字符串本身,以便最长的单词将以大写字母书写。

到目前为止,这是我的代码:

void
longestInCaptital(char *str)
{
    char *delimiters = "?:,- ";
    char copyOfStr[strlen(str)];

    strcpy(copyOfStr, str);
    char *temp = strtok(copyOfStr, delimiters);
    int maxLetters = 0;
    char *tempIndex;

    while (temp) {
        if (strlen(temp) > maxLetters) {
            maxLetters = strlen(temp);
            tempIndex = temp;
        }
        temp = strtok(NULL, delimiters);
    }
    str = tempIndex;
    int i;

    for (i = 0; i < maxLetters; i++) {
        str[i] = toupper(str[i]);
    }
}


我试图使它工作,但是不能,
谢谢你的帮手!

最佳答案

你很近。您只需要将副本中最大字符串开头的偏移量应用于原始地址即可。

另外,请注意,copyOfStr必须为+1才能说明EOS字符。

注意:我尚未测试:

void
longestInCaptital(char *str)
{
    char *delimiters = "?:,- ";
    char copyOfStr[strlen(str) + 1];

    strcpy(copyOfStr, str);

    int maxLetters = 0;
    char *tempIndex = NULL;

    char *temp = strtok(copyOfStr, delimiters);
    while (temp) {
        int curlen = strlen(temp);
        if (curlen > maxLetters) {
            maxLetters = curlen;
            tempIndex = temp;
        }
        temp = strtok(NULL, delimiters);
    }

    int i;

    // get starting offset within _original_ string
    str += (tempIndex - copyOfStr);

    for (i = 0; i < maxLetters; i++) {
        str[i] = toupper(str[i]);
    }
}

10-07 19:24
查看更多