2013-07-26 102 views
0
#include <iostream> 
#include <string> 
#include <map> 
using namespace std; 

int main() 
{ 
    map<string, string> opposites; 
    opposites["A"] = "T"; 
    opposites["T"] = "A"; 
    opposites["C"] = "G"; 
    opposites["G"] = "C"; 
    string line = "AGATTATATAATGATAGGATTTAGATTGACCCGTCATGCAAGTCCATGCATGACAGC"; 
    int promoter_index,i; 
    for (i = 0; i < line.length();i++) 
    { 
     if (line[i] == "T" && line[i+1] == "A" && line[i+2] == "T" && line[i+3] == "A" && line[i+4] == "A" && line[i+5] == "T") 
      promoter_index = i; 
    } 
    int start_of_sequence = promoter_index + 10; 
    cout << promoter_index; 

} 

我開始在「行」中找到TATAAT,但是當我嘗試比較它時說「ISO C++禁止在指針和整數之間進行比較」。爲什麼?指針和整數錯誤之間的比較

回答

4

std::string::operator[]返回一個字符,而不是一個c字符串。

if (line[i] == "T" && line[i+1] == "A"... 

應該是

if (line[i] == 'T' && line[i+1] == 'A'... 

單引號表示字符,而雙引號表示C-字符串。

c字符串的類型爲const char[],隱含轉換爲const char*char s是C++中不可或缺的類型,因此編譯器告訴您的是,您無法將指針(c字符串「T」)與整數類型(由返回的char)進行比較。你被告知你無法在ISO C++中進行比較的原因是,在C++預標準化的黑暗和殘酷的日子裏,你可以做比較整型和平等指針。

3

您錯誤地試圖比較單個個字符到整個字符串。在一個字符串

使用標([])經營者給你一個字符,但"T"字符串字面(是的,儘管它只有一個字符&匕首;。)

line[i] == "T" 
/*****/ /***/ 
//^ ^
// |  | 
// char  | 
//  char const[2] 

字符文字是由 -quotes分隔的,所以你的意思是寫:

line[i] == 'T' 

所以,在上下文中:

if (line[i] == 'T' 
&& line[i+1] == 'A' 
&& line[i+2] == 'T' 
&& line[i+3] == 'A' 
&& line[i+4] == 'A' 
&& line[i+5] == 'T') 

&dagger;實際上,它也有第二個字符,你看不到—的空終止符

4

這是因爲std::string::operator[]返回到char的引用,而字符串文字如「T」是一個const char[N],其衰減到const char*在比較。如果你想的line元素比較單個字符,使用單引號:

if (line[i] == 'T' && line[i+1] == 'A' .... 
0

讓你的程序編譯只是改變了文字到''。例如line[i] == 'T'

或者,您可以使用strcmp(&line[i], "T") != 1來比較兩個字符的值是否相等。

相關問題