2011-11-10 39 views
-1
#include <iostream> 
    #include <vector> 
    using namespace std; 

    int main(){ 

    vector<string> row(7, "0"); 
    char input; 
    int pos; 

    cin >> input; 
    cin >> pos; 

    if(input == 'X') 
     row[pos] = '1'; 

    //ascii value of 1 is 49 

    if(row[pos] - 49 == 0) 
     cout << "Correct"; 

    return 0; 
    } 

我在我最后的if声明中不断收到错误。任何想法为什么它不工作,我该如何解决它?顺便说一句,row是一个字符串向量,我不能让它任何其他类型。我的代码有什么问题?我该如何解决它? C++

我想row[pos]采取row字符的位置pos

+4

你忘了告诉我们你得到它的错误。这应该是标题的一部分,你现在的标题是非常通用的。 –

+1

我认为标题没有描述任何有用的东西。你想解决什么样的错误 –

+0

你使用什么输入? –

回答

2

与上次if语句的问题是,row[pos]string型。所以你不能从中减去49。你想要的是字符串的第一个字符:

if(row[pos][0] - 49 == 0) 

这可以说是更具可读性要做到这一点,而不是:

if(row[pos][0] - '1' == 0) 
+0

为什么row [pos]是一个字符串而不是char?我不想要第一个位置,我想要用户输入的数字的位置,这就是为什么我排列[pos] – user1038665

+0

'row'是一个字符串向量。 'row [pos]'给你在那个向量中的'pos'th'字符串。所有的字符串只有1个字符。要访问它,你需要额外的'[0]'来访问该字符。 – Mysticial

+0

因此,让我们说pos = 5. row [pos] [0]将位于矢量行的位置5处的字符? – user1038665

3

我猜你要比较的情况下的第一个字母,在这种情况下,你有两个选择:

if(row[pos][0] - 49 == 0) 
     cout << "Correct"; 

if(*row[pos].c_str() - 49 == 0) 
     cout << "Correct"; 

试图从std::string减去int是非法的。

row[pos]是一个字符串,因为rowstrings一个vector。如果您希望rowstringrow[pos]char,请将行声明为字符串。或者你的意思是排成chars的矢量。

+0

不是该行中的第一个字母,而是位置pos处的字母,表示用户指示。 – user1038665

+0

@ user1038665其中字符串。行是字符串的向量,而不是单个字符串。 –

4

你不能减去整数和字符串。

使用字符和转换为int:

char ch = row[pos][0]; 
int asciiCode = (int)ch; 
if (asciiCode == 49) { 
    cout << "Correct"; 
} 
相关问题