不使用reverse()方法反转字符串。我究竟做错了什么

时间:2016-07-30 12:47:08

标签: c++ string

有人能告诉我为什么这不起作用吗? 我想检查一个单词是否是回文(不使用reverse()方法)

const char *data = "size=100M,mode=0755";
...
mount(source, target, filesystemtype, mountflags, data);

2 个答案:

答案 0 :(得分:3)

让我们看看这两个具体的行:

string temp;

    temp[count] = s[i];

在第一行中,您声明了一个字符串对象。然后在第二个中,您尝试写入空字符串的索引count。由于字符串为空,索引将超出范围。索引越界导致未定义的行为

相反,第二行可能是例如。

    temp += s[i];

这会将字符附加到字符串temp,并且根据需要扩展字符串。

您可以将临时字符串的大小设置为与输入字符串相同的大小:

string temp{s,size(), ' '};

答案 1 :(得分:1)

您有两种方法可以纠正您的代码:

  1. 定义临时字符串的大小。

    char temp[s.size]; //Something similar to this.

  2. string temp;创建一个空字符串,您可以使用追加赋值运算符将反向字符串附加到空字符串。 temp+=s[i];

  3. 以下是更正后的代码:

    bool check(const string & s)
    {
        string temp;
        //int count = 0;
    
        for (long i = s.size() - 1; i >= 0; i--)
            temp += s[i];
            //temp[count] = s[i];
    
        cout << temp;
        if (temp == s)
            return true;
        else
            return false;
    }