让我们说我正在尝试做以下事情(这是我想要实现的一个子问题):
int compareFirstWord(char* sentence, char* compareWord){
char* temp; int i=-1;
while(*(sentence+(++i))!=' ') { *(temp+i) = *(sentence+i); }
return strcmp(temp, compareWord); }
当我跑compareFirstWord("Hi There", "Hi");
时,我在复制线上收到错误。它说我正在使用temp未初始化。然后我使用char* temp = new char[];
在这种情况下,函数返回1而不是0.当我调试时,我看到temp以一些长度为16的随机字符开始,strcmp
因此而失败。
有没有办法声明一个空的char *并仅动态增加大小和我需要的内容?有什么办法让这个功能起作用?我不想使用std::string
。
答案 0 :(得分:5)
在C中,您可以这样做:
int compareFirstWord(const char* sentence, const char* compareWord)
{
while (*compareWord != '\0' && *sentence == *compareWord) {
++sentence;
++compareWord;
}
if (*compareWord == '\0' && (*sentence == '\0' || *sentence == ' ')) {
return 0;
}
return *sentence < *compareWord ? -1 : 1;
}
使用std::string
,您只需:
int compareFirstWord(const std::string& sentence, const std::string& compareWord)
{
return sentence.compare(0, sentence.find(" "), compareWord);
}
答案 1 :(得分:0)
temp是一个未初始化的变量。
看起来你正在尝试从循环中的句子中提取第一个单词。
为了这样做,你首先必须将temp初始化为至少与你的句子一样长。
此外,您的句子可能没有空格。 (期间怎么样,\ t,\ r,\ n?这些问题吗?)
此外,您必须使用空字符终止temp。
你可以尝试:
int len = strlen(sentence);
char* temp = new char[len + 1];
int i = 0;
while(i < len && *(sentence+(i))!=' ') {
*(temp+i) = *(sentence+i);
i++;
}
*(temp+i) = '\0';
int comparable = strcmp(temp, compareWord);
delete temp;
return comparable;
还考虑使用isspace(*(句子+(i))),它至少会捕获所有空格。 但是,一般情况下,我会使用库或STL ...为什么要重新发明轮子......