【问题标题】:Variable prints intended(length of a string) value only in a particular cout statement变量仅在特定 cout 语句中打印预期(字符串的长度)值
【发布时间】:2021-11-07 02:55:03
【问题描述】:

minlen 变量仅在 middle cout 中打印,并在其他任何地方使用时给出随机值

class Solution
{
    public:
    string longestCommonPrefix(vector<string>& strs)
    {
        int sofar = sizeof(strs) / 8;
        int len[sofar], i, j, minlen;
        string newstr = "";

        for(i = 0; i < sofar; i++)
        {
            len[i] = strs[i].length();
            if(len[i] < minlen)
                minlen = len[i];
        }

        //!!!!!!!!!!!!!!!!!!!   HERE    !!!!!!!!!!!!!!!!!!!!
        cout << minlen << endl;
        cout << "sofar : " << sofar << endl << "minlen : " << minlen << endl;
        cout << minlen << endl;

        /*for(i=0;i<mlen;i++)
        {
             cout<<"outer"<<endl;
            for(j=0;j<sofar-1;j++)
            {
                cout<<"middle"<<endl;
                if(strs[j][i]==strs[j+1][i])
                {   newstr=newstr+strs[j+1];
                    cout<<"innermost"<<endl;
                }
            }
        }*/

        return newstr;
    }
};

【问题讨论】:

  • 你没有初始化minlen,所以if(len[i]&lt;minlen)是未定义的行为
  • 另外sizeof(strs) / 8 绝对不是你想要的(为什么 / 8 无论如何?)。你想要strs.size()
  • 将 sizeof(strs) / 8 更改为 strs.size() 修复了它
  • @madlading 如果您对答案感到满意,请点击其左侧的复选框接受。

标签: c++ string vector string-length


【解决方案1】:
int len[sofar], i, j, minlen;

这里minlen 被声明但未初始化,因此给出了当时堆栈中剩余的随机值。

            if(len[i] < minlen)
                minlen = len[i];

第一次执行if 语句时,minlen 仍然是一个随机值。只有当测试成功时才设置

【讨论】:

  • 您可能还想解决int sofar = sizeof(strs) / 8; 中的问题。
【解决方案2】:

这段代码中除了sizeof之外还有一个严重的问题。

您没有在使用之前初始化minlen,因此虽然它看起来可以工作,但实际上并没有工作并且是未定义的行为

因为,您似乎想找到长度最小的字符串并将其长度存储在 minlen 中,一种解决方法是将 minlen 分配给第 0 个索引处的字符串长度(或任何索引) ) 由

    minlen = strs[0].length();

    for(i = 0; i < sofar; i++)
        {
            len[i] = strs[i].length();
            if(len[i] < minlen)
                minlen = len[i];
        }

这不会改变代码的功能,但会删除未定义的行为。

另外,sizeof 返回向量中的字节数,而size() 返回向量中的项目数。这就是 .size() 起作用的原因。

【讨论】:

    猜你喜欢
    • 2018-08-11
    • 1970-01-01
    • 2022-06-21
    • 2017-05-24
    • 2022-11-28
    • 2020-10-19
    • 1970-01-01
    • 2017-04-18
    • 2014-12-27
    相关资源
    最近更新 更多