strcmp inside if 在函数内部不起作用
Posted
技术标签:
【中文标题】strcmp inside if 在函数内部不起作用【英文标题】:strcmp inside if does not work inside function 【发布时间】:2020-01-15 04:13:19 【问题描述】:我正在编写一个函数,它接收多个数组作为参数,如下:
const int numofparticles = 20;
const int numofdims = 46;
const int numforn = 222;
const int forn_sem_repet = 92;
float cost(float x[numofdims], float M[numofdims][numforn], char prod[numofdims][102], char forn_list[numforn][102], float qtde[numofdims][1], float min_prices[forn_sem_repet], char min_forn[forn_sem_repet][102])
float v = 0;
vector<string> forn;
vector<float> total;
int i;
int j;
for(i=0;i<numofdims;i++)
if(x[i] != -1)
forn.push_back(forn_list[(int)x[i]]);
total.push_back(qtde[i][1] * M[i][(int)x[i]]);
for(j=i+1;j<numofdims;j++)
if(strcmp(forn_list[(int)x[j]],forn.back()) == 0)
total.back() += qtde[j][1] * M[j][(int)x[j]];
x[j] = -1;
else
continue;
for(i=0;i<numofdims;i++)
v += qtde[i][1] * M[i][(int)x[i]];
int lin;
for(i=0;i<forn.size();i++)
for(int ii=0;ii<forn_sem_repet;ii++)
if(strcmp(forn[i],min_forn[lin]) == 0)
lin = ii;
break;
if(total[i] < min_prices[lin])
v += 1000;
return v;
它在strcmp()
中都返回一个错误。
error: cannot convert ‘__gnu_cxx::__alloc_traits<std::allocator<std::__cxx11::basic_string<char> > >::value_type aka std::__cxx11::basic_string<char>’ to ‘const char*’ for argument ‘2’ to ‘int strcmp(const char*, const char*)’
if(strcmp(forn_list[(int)x[j]],forn.back()) == 0)
和
error: cannot convert ‘__gnu_cxx::__alloc_traits<std::allocator<std::__cxx11::basic_string<char> > >::value_type aka std::__cxx11::basic_string<char>’ to ‘const char*’ for argument ‘1’ to ‘int strcmp(const char*, const char*)’
if(strcmp(forn[i],min_forn[lin]) == 0)
但是,在main
函数中,加载所有变量后,循环。
for(i=0;i<numforn;i++)
for(j=0;j<forn_sem_repet;j++)
if(strcmp(forn_list[i],min_forn[j]) == 0)
printf("%s\n%s %d %d", forn_list[i],min_forn[j],i,j);
printf("\n\n");
break;
完全按预期工作。
在函数cost
中可以做些什么来解决这个问题?
【问题讨论】:
【参考方案1】:在函数中,您声明了vector<string> forn;
,这与if(strcmp(forn_list[(int)x[j]],forn.back()) == 0)
行不兼容,因为strcmp
只能将C 风格的char*
字符串作为参数,而不是std::string
。这正是编译器所抱怨的。
要使您的代码正常工作,请将该行中的 forn.back()
替换为 forn.back().c_str()
。
【讨论】:
我相信正确的替换是forn.back().c_str()
以上是关于strcmp inside if 在函数内部不起作用的主要内容,如果未能解决你的问题,请参考以下文章