我试图使Substrings的长度恰好是原始字符串长度的一半,然后按照其ASCII码的顺序对其进行排序,最后使用strcmp()库函数检查其相等性。
(那是我试图检查是否可以将父字符串分为两个相等的部分。)
所以这就是我所做的:
输出为空白。
#include <bits/stdc++.h>
#define fastIO ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define llt long long int
using namespace std;
int main()
{
int length,hlength,i,result;
string s;
cin>>s;
length = s.length();
hlength = length/2;
string s1,s2;
for(i = 0; i< hlength;i++)
{
s1[i] = s[i];
cout<<s1[i]<<endl; //each element gets printed successfully
}
for(i = 0; i< hlength ; i++)
{
s2[i] = s[length -1 - i];
cout<<s2[i]<<endl; //the elements are printed successfully, but obviously in the reverse order( order not matters)
}
cout<<s1<<endl<<s2; // no strings printed
sort(s1.begin(),s1.end());
sort(s2.begin(),s2.end());
result = strcmp(s1 , s2); //ERROR
cout<<result<<endl;
return 0;
}
PS:原始字符串的长度是偶数。
请帮助我知道为什么不打印字符串但正确打印单个元素。
这个错误是什么意思?
最佳答案
strcmp
需要char指针-这是您的错误消息告诉您的内容。
您可以使用string::compare
或==
运算符,而不会出现此错误。看到:
Stackexchange Topic和cppreference。
为了完整起见,您还可以使用字符串的std::string
方法将c_str()
转换为char指针,但这有点难看。
您看到了真正的值(value),但是却遇到了不确定的行为。 s1
和s2
的长度为零。运算符[pos]
定义:
最后一点就是您的经验-也许您写入了不属于字符串的一部分内存,但是仍然可以在同一作用域中访问它。但是,当您尝试退出字符串时,字符串存储块中没有写入任何内容。但是谁知道,它的不确定行为,可能会发生任何事情。
区段中的异常安全:
http://www.cplusplus.com/reference/string/string/operator[]/
关于c++ - 字符串未正确复制并显示错误: cannot convert 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61270381/