【问题标题】:Conversion of string to string *字符串到字符串的转换 *
【发布时间】:2021-07-04 20:08:25
【问题描述】:

在将一个字符串的反转分配给另一个字符串时遇到错误。

[错误] 将 'char*' 分配给 char[20] 时类型不兼容

这是我的代码

#include<iostream>
#include<string.h>
using namespace std;
int main()
{
    char str[20],str2[20];
    int length;
    cout<<"Enter the string\n";
    cin>>str;
    length=strlen(str);
    str2=strrev(str);
    if(str==str2)
    {
        cout<<"Palindrome"; 
    }
    else{
        cout<<"Not a palindrome";
    }
    return 1;
}

任何关于我做错了什么的解释都会非常有帮助。 干杯

【问题讨论】:

  • str2=strrev(str); str2 是一个数组。 strrev() 的返回是指针而不是数组。您不能分配数组,也不会从 char 指针复制。
  • 您通过混合 c 和 c++ 使事情变得不必要地复杂化。在 C++ 中使用 std::stringstd::reverse
  • std::string str;...if (str == std::string(str.rbegin(), str.rend()) { palindrome } else { not palindrome }
  • 使用string.h 而不是string(甚至cstring 会稍微好一点)表明教程很差。扔掉你正在使用的任何教程,然后找到一个现代的 C++ 教程。如果你的 C++ 老师告诉你使用string.h,那么也把它们扔掉。
  • 是的,std::string 是在 C++ 中存储字符串的正确方法。您之前使用的函数(strlenstrrev)是不能用于 C++ 字符串的 C 函数。阅读std::string 并使用与它一起工作的功能。混合使用 C 和 C++ 只会带来灾难。

标签: c++


【解决方案1】:

正如其他人所推荐的,一个简单的解决方案是使用std::string 而不是char [20],然后您可以调用方法reverse() 来完成这项工作。

这是我的简单代码:

#include <iostream>
#include <string>
#include <algorithm>

int main()
{
    std::string str, str2;

    std::cout << " Please Enter The String : \n";
    std::cin >> str;    

    str2 = str;
    
    reverse(str.begin(), str.end());
    
    if( str == str2 )
        std::cout << "Palindrome"; 
    else
        std::cout << "Not a palindrome";

    return 0;
}

我已经测试并验证了代码是否有效。

【讨论】:

  • 请扔掉using namespace std;。反正你用了一半。
  • 您好,非常感谢您的回答,只是一个简单的问题,反向函数是否属于算法头文件?
  • @Freeze,是的。这是真的。
  • @Freeze 确实如此。感谢ADL,您可以在没有命名空间限定的情况下调用reverse。但“你可以”并不意味着“你应该”。除非有理由不这样做,否则更喜欢明确的限定条件。
  • @Evg,谢谢你的好建议。现在,如果我删除“使用命名空间标准”,那么我会得到这个编译错误:“main.cpp:18:5: error: ‘string’ is not declared in this scope”。你知道如何解决这个问题吗? (请运行代码并告诉我)。谢谢。
【解决方案2】:

strrev 是一个非标准的 C 函数,它可以就地反转。所以这个任务没有意义。 strcpy + strcmp 可能是合适的。

既然你标记了这个 c++ 你真的想使用 std::string 来使事情更简洁。

#include<string>
#include<iostream>
#include<algorithm>
int main(){
    std::string in1, palindrome;
    std::cin >> in1;
    palindrome = in1;
    // reverse palindrome with std::reverse
    // compare with == for like contents. 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-05
    • 2011-03-25
    • 1970-01-01
    • 2013-01-27
    • 2023-02-05
    • 2019-01-05
    • 2016-04-08
    • 1970-01-01
    相关资源
    最近更新 更多