尝试使用数组在字符串中找到最短的句子
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]);
【问题讨论】:
您不清楚这个问题的哪个具体部分?不是应该很明显,<
而不是>
,并将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的冗余调用。以上是关于尝试使用数组在字符串中找到最短的句子的主要内容,如果未能解决你的问题,请参考以下文章