我正在尝试消除字符串数组中的额外元素,我编写了下面的代码。 strcmp函数和字符串数组似乎有问题。 Strcmp不接受那种字符串数组元素。你能帮我解决这个问题吗? array3是字符串数组。我用C ++编写代码,我想要做的就是字符串数组中有多个“apple”或“banana”。但我只需要一个“苹果”或一个“香蕉”。
for(int l = 0; l<9999; l++)
{
for(int m=l+1;m<10000;m++)
if(!strcmp(array3[l],array3[m]))
{
array3[m]=array3[m+1];
}
}
答案 0 :(得分:1)
strcmp
在相等时返回0,因此if (strcmp(s1,s2))...
表示“如果字符串相等则执行此操作......”。这是你的意思吗?
答案 1 :(得分:0)
首先,您可以使用operator==
来比较std::string
类型的字符串:
std::string a = "asd";
std::string b = "asd";
if(a == b)
{
//do something
}
其次,您的代码中有错误,前提是10000是数组的大小:
array3[m]=array3[m+1];
在这一行中,您正在访问m+1
st元素,其中m
最多为10000.这意味着您最终将尝试访问第10001个元素,并退出数组绑定。
最后,您的方法是错误的,这种方式不会让您删除所有重复的字符串。 一个更好(但不是最好)的方法就是这个(伪代码):
std::string array[];//initial array
std::string result[];//the array without duplicate elements
int resultSize = 0;//The number of unique elements.
bool isUnique = false;//A flag to indicate if the current element is unique.
for( int i = 0; i < array.size; i++ )
{
isUnique = true;//we assume that the element is unique
for( int j = 0; j < result.size; j++ )
{
if( array[i] == result[j] )
{
/*if the result array already contains such an element, it is, obviously,
not unique, and we have no interest in it.*/
isUnique = false;
break;
}
}
//Now, if the isUnique flag is true, which means we didn't find a match in the result array,
//we add the current element into the result array, and increase the count by one.
if( isUnique == true )
{
result[resultSize] = array[i];
resultSize++;
}
}
答案 2 :(得分:0)
strcmp仅适用于Cstrings,所以如果您想使用它,我建议您将其更改为以下内容:strcmp(array3[l].c_str(),array3[m].c_str())
使字符串成为C字符串。
另一种选择是简单地将它们与等于运算符array3[l]==array3[m]
进行比较,这将告诉您字符串是否相等。
另一种做你要做的事情的方法就是将数组放在 set 中并迭代它。集合不会占用相同内容的多个字符串!
参考文献: