我正在尝试http://www.spoj.com/problems/SHLIGHTS/,我为此设计了一个解决方案。我是C ++的新手(大约14天),我面临很多问题。早些时候我使用过Python,并没有出现这些错误,反正我写了这个..
#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
//example is GBGBBB
//t=0, GBGBBB then t=1,BGBGBB then t=2 BBGBGB, then t=3 BBBGBG
//search for GB and replace it with BG
//we need a function that replaces things
string swapSEQ(string SEQ)
{
unsigned int sizeSEQ=SEQ.size();
unsigned int curr(0);
while (curr<sizeSEQ-1)
{
if (SEQ[curr]=="G" and SEQ[curr+1]=="B")
{
SEQ[curr]="B";SEQ[curr+1]="G";curr+=2;
}
else {++curr;}
}
return SEQ;
}
int main()
{
unsigned int numCases;
scanf("%d",&numCases);
// cin>>numCases;
for (unsigned int currentCase=0;currentCase<numCases;++currentCase)
{
string SEQ;
//scanf("%s",&SEQ);
cin>>SEQ;
string swapped=swapSEQ(SEQ);
unsigned long long t=0;
while (swapped!=SEQ)
{
swapped=swapSEQ(SEQ);++t;
}
printf("%lld\n",t);
}
return 0;
}
我知道这很多细节,但就是这样。 SPOJ在输入和输出后显示空白行,但在阅读说明后,我理解我们必须单行做事。这是我用g ++ 4.7编译器(LINUX)
得到的SHLIGHTS.cpp: In function ‘std::string swapSEQ(std::string)’:
SHLIGHTS.cpp:17:18: error: comparison with string literal results in unspecified behaviour [-Werror=address]
SHLIGHTS.cpp:17:18: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
SHLIGHTS.cpp:17:37: error: comparison with string literal results in unspecified behaviour [-Werror=address]
SHLIGHTS.cpp:17:37: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
SHLIGHTS.cpp:17:52: error: invalid conversion from ‘const char*’ to ‘char’ [-fpermissive]
SHLIGHTS.cpp:17:66: error: invalid conversion from ‘const char*’ to ‘char’ [-fpermissive]
cc1plus: all warnings being treated as errors
* 发生了什么事?有一些关于指针,const char 和未指定的行为
**我知道指针是一种指向内存位置的变量,仅此而已
**我在某些地方使用了scanf并且在其他地方使用了cin(如果我用cin替换scanf,我会得到相同的错误)
**是否有关于我返回一个字符串作为参数的事实?
**我在哪里使用指针?
**我错了 - c ++中的字符串是char数组吗?如果不是,那么无效转换在哪里?
提前致谢,并对任何错误道歉。如果时间太长,请回答任何疑问。
答案 0 :(得分:1)
SEQ[curr]
与'G'
进行比较而不是"G"
,因为它是字符而不是字符串。&&
代替and
。 if (SEQ[curr] == 'G' && SEQ[curr] == 'B'
与撰写if (false)
。cin
,而不是scanf
。sizeSEQ
?唐&#39;!吨答案 1 :(得分:0)
您应该使用'G'
代替"G"
,依此类推。当您访问char数组(例如arr[5]
)时,您将获得char
,您可以将其与char字面(为'G'
)进行比较,而不是与cstring进行比较(例如{{1} }或"G"
)。
编译器是你的朋友,它指出问题是:
与字符串文字比较