尝试使用数组在字符串中找到最短的句子

Posted

技术标签:

【中文标题】尝试使用数组在字符串中找到最短的句子【英文标题】:Trying to find shortest sentence in string using arrays 【发布时间】:2020-03-20 16:44:11 【问题描述】:

我得到了在句子数组中查找最长句子的功能,我现在如何将其转为找到最短的句子,然后将其复制到 char R[red];然后对最短的句子的最后一个单词进行操作,将第一个和最后一个字母变为大写

void longest (char SENTENCE[max][red],char R[red], int n)
    int longest = 0;
    for (int i = 0 ; i < n ; i++)
        if(strlen(SENTENCE[i]) > longest)
            longest = strlen(SENTENCE[i]);
            strcpy_s(R,red,SENTENCE[i]);
        
    

【问题讨论】:

您不清楚这个问题的哪个具体部分?不是应该很明显,&lt;而不是&gt;,并将longest初始化为第一个数组的长度(当然,检查后n至少为1)? 您要使用 C 还是 C++? 我正在尝试使用 c++ How do I tokenize a string in C++?的可能重复 【参考方案1】:

对于初学者来说,有一个标准算法std::min_element,它返回一个指向容器中最小元素的迭代器。但是将它与函数 strlen 一起使用不会很有效。

所以你确实可以自己编写这样的函数。它可以如下所示

void shortest( const char s[][red], char t[], size_t n )

    t[0] = '\0';

    if ( n != 0 )
    
        size_t min_i   = 0;
        size_t min_len = std::strlen( s[0] );

        for ( size_t i = 1; i < n; i++ )
        
            size_t len = std::strlen( s[i] );
            if ( len < min_len )
            
                min_i   = i;
                min_len = len;
            
        

        std::strcpy( t, s[min_i] ); 
    

【讨论】:

【参考方案2】:

这样弄的

void shortest (char SENTENCE[max][red],char R[red], int n)
    int shortest = strlen(SENTENCE[0]);
    for (int i = 0 ; i < n ; i++)
        if(strlen(SENTENCE[i]) < shortest)
            shortest = strlen(SENTENCE[i]);
            strcpy_s(R,red,SENTENCE[i]);
        
    


【讨论】:

这个函数实现在一般情况下是无效和低效的,因为存在strlen和strcpy的冗余调用。

以上是关于尝试使用数组在字符串中找到最短的句子的主要内容,如果未能解决你的问题,请参考以下文章

如何使用正则表达式找到最短的重叠匹配?

找最长最短字符串

使用动态规划找到 A 和 B 的最短交错字符串

在单词中找到最短的重复周期?

最短母串

Javascript reduce() 查找字符串中最短的单词