RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 590227
Accepted
Abraam
Abraam
Asked:2020-11-13 02:00:57 +0000 UTC2020-11-13 02:00:57 +0000 UTC 2020-11-13 02:00:57 +0000 UTC

C语言从一个字符串中找出最小的单词?

  • 772
count = 0; posmin = 0; countmin = strlen(str);

for(i = 0; i <= strlen(str); i++){

    if(isalpha(str[i]) == 1){

        if(isalpha(str[i + 1]) == 0){
            count++;
            if(count < countmin){
                countmin = count;
                posmin = i;
                count = 0;
            }
        }

        else count++;
    }
}
c
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. Best Answer
    Harry
    2020-11-13T02:17:10Z2020-11-13T02:17:10Z

    如果不是strtok,那么,例如,像这样(假设该词仅来自字符isalpha):

    int main()
    {
    
        char * str = " cbvahv xchnvz jh  jhs sdfjhgbvjhsbvdf sdfh ";
        int count = 0,  posmin = -1,  countmin = strlen(str);
        for(int i = 0; i < strlen(str);)
        {
            while(str[i] && !isalpha(str[i])) ++i;
            if (str[i] == 0) break;
            int pos = i;
            while(str[i] && isalpha(str[i])) ++i;
            count = i - pos;
            if (count < countmin)
            {
                countmin = count;
                posmin = pos;
            }
        }
    
        for(int i = posmin; i < posmin+countmin; ++i)
            putchar(str[i]);
        putchar('\n');
        printf("Len = %d, pos = %d\n",countmin,posmin);
    }
    
    • 1
  2. PinkTux
    2020-11-13T02:25:10Z2020-11-13T02:25:10Z

    作为一个选项:

    #include <stdio.h>
    #include <string.h>
    #include <limits.h>
    
    /*
     * Немного другой подход: определяем слово по границам,
     * а не по набору символов
     */
    #define DELIMITERS " \n\r\t,.;!?:-()[]<>{}\"'|+-"
    
    int main( void )
    {
        const char text[] = "678 s 1234 56";
        const char *s = text, *minptr = text;
        size_t minlen = strlen( text );
    
        while( *s ) {
            const char *ptr;
    
            while( *s && strchr( DELIMITERS, ( *s & CHAR_MAX ) ) ) {
                s++;
            }
    
            ptr = s;
            while( *s && !strchr( DELIMITERS, ( *s & CHAR_MAX ) ) ) {
                s++;
            }
    
            if( *ptr && s - ptr < minlen ) {
                minlen = s - ptr;
                minptr = ptr;
            }
        }
    
        /* minptr - указатель на начало слова, если нужно 
         * вычленить само слово, то это уже отдельно
         */
        printf( "%zu - %s\n", minlen, minptr );
        return 0;
    }
    
    • 1
  3. Vlad from Moscow
    2020-11-13T02:51:26Z2020-11-13T02:51:26Z

    查找字符串中最小的单词涉及找到它的两个特征:它是指向字符串中单词开头的指针和单词本身的长度。

    要存储这些特征,最好创建一个包含两个数据成员的结构,并使用一个单独的函数来查找任何字符串的最小单词。

    下面是一个演示程序,展示了如何做到这一点

    #include <stdio.h>
    #include <ctype.h>
    
    struct Position
    {
        char *p;
        size_t n;
    };
    
    Position min_word(const char *s)
    {
        Position min = { NULL, 0 };
    
        while (*s)
        {
            while (isblank((unsigned char)*s)) ++s;
    
            if (*s)
            {
                Position current = { ( char * )s, 0 };
    
                while (*s && !isblank((unsigned char)*s))
                {
                    ++current.n;
                    ++s;
                }
    
                if (min.p == NULL || current.n < min.n) min = current;
            }
        }
    
        return min;
    }
    
    int main(void)
    {
        char s[] = "Hello hi chiao";
    
        Position min = min_word(s);
        printf("The minimum word in the string is %*.*s with length of %zu\n", 
                min.n, min.n, min.p, min.n);
    
        return 0;
    }
    

    将程序输出到控制台

    The minimum word in the string is hi with length of 2
    

    请注意,您不需要使用 , 之类的字符串函数来查找字符串中的最小单词strlen,因为这只是浪费时间。

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5