下面是将s2与s1进行比较的代码,如果它们相同则会返回0和其他一些选项,但是虽然循环不能终止并且我找不到它的问题,但我唯一知道的是我转换了char * s2进入const char * s2它会正常工作。
#include <iostream>
using namespace std;
int cmp(char*,char*);
int main()
{
char* s1;
cout << "Please Enter First Word: "; cin >> s1;
char* s2;
cout << "Please Enter Second Word: "; cin >> s2;
cout << "The Result is: " << cmp(s1,s2) << endl;
return 0;
}
int cmp(char* s1, char* s2)
{
int i=0;
while (*(s2+i)!=0)
{
if (*(s2+i)>*(s1+i)) return 1;
if (*(s2+i)<*(s1+i)) return -1;
i++;
}
return 0;
}
答案 0 :(得分:5)
您有未定义的行为。您没有分配任何空间来存储字符串(您没有初始化s1
或s2
指向任何内存)。
我建议改用std::string
;它管理自己的内存问题。
答案 1 :(得分:4)
考虑:
char* s1;
cout << "Please Enter First Word: "; cin >> s1;
s1
有多大?问题是你的char指针没有指向任何内存块。您需要使用new
分配内存。
答案 2 :(得分:1)
如上所述,Oli和karlphillip说,你的代码必须为字符串分配内存。
compare
功能可以像....
int cmp(char* s1, char* s2)
{
int i=0;
while ( *(s1+i)!=0 & *(s2+i)!=0 )
{
if (*(s2+i)>*(s1+i)) return 1;
if (*(s2+i)<*(s1+i)) return -1;
i++;
}
if(*(s1+i)==0 & *(s2+i)==0 )
return 0;
else if (*(s1+i)!=0)
return -1;
else
return 1;
}
因为,只要str1的长度大于str2和str1与str2的长度相同,cmp
函数将return 0
{{1}}。