2012-11-13 37 views
1

我想字符串比較支票的介紹C++課程工作;這是一個在線課程,不幸的是教練的反應並不敏捷。對於當前的實驗室,我需要對字符串數據執行一些操作。C++的char按字符字符串比較

目前,我正在一步檢查一個字符串有任何重複的字符,如果重複被發現,以他們目前的現貨刪除重複字符和移動信的一個副本的開始字符串。這只是爲了找到第一個雙人。

我已經建立了一個基本的計數器通過串動尋找匹配,檢查存儲的字符(更新在每次迭代),以字符串中的當前位置。

我試圖多個字符串的函數(比較當前inputString[i]到以前這樣,存儲爲第二個字符串tempStore),但那些總是給焦炭轉換錯誤。我嘗試了以下代替,但現在給了一個錯誤:「從‘字符’到‘const char*’無效轉換

inputString是由用戶,testAtestB被定義爲char類型給出

任何想法

while (opComplete == false) { 

    if (i == 0) { 
     i++; 
    } 

    else if (i == inputString.size()) { 
     //Not Found 
     opComplete = true; 
    } 

    else if (i > 0) { 

     testA = inputString[i-1]; 
     testB = inputString[i]; 

     if (strcmp(testA,testB) != 0) { 
      i++; 
     } 

     else { 
      inputString.insert(0,inputString[i]); 
      inputString.erase(i,1); 
      inputString.erase(i-1,1); 
      opComplete = true; 
     } 

    } 

} 
+0

你是怎麼聲明'testA'和'testB'的? – SingerOfTheFall

+0

嗨 - 基本字符聲明:炭種皮,TESTB; – JStymie

+0

當'testA'和'testB'是'char'類型時,你不能將它們傳遞給'strcmp',因爲這個函數需要字符串。只需將它們與等號運算符('==')進行比較即可! – masaers

回答

1

您的問題是在這條線:

inputString.insert(0,inputString[i]); 

std::string.insert()工作,你在這裏打電話的方式具有以下特徵:

string& insert (size_t pos1, const char* s); 

所以它需要一個const char指針。然而,你正在給它inputString[i]。的std::string.operator[]返回值是一個參考值(如here),因此該錯誤。然而,你的時間到達你的else,你已經在你的testB變量所需的字符,這樣你就可以只改變行

inputString.insert(0, &testB); 

你也無法通過正常char s轉換strcmp。您可以使用operator==,或者,你的情況,operator!=雖然。

+0

歌手,非常感謝。我現在正在工作,感謝幫助! – JStymie

0

您正在使用insert方法不正確,檢查其參考here可能的論點。

while (opComplete == false) 
{ 
    if (i == 0) 
    i++; 

    else if (i == inputString.size()) 
    opComplete = true; 

    else if (i > 0) { 
    char testA = inputString[i-1]; 
    char testB = inputString[i]; 

    if(testA!=testB) 
    i++; 

    else { 
     inputString.insert(0,&testB); //Problem Corrected here. 
     inputString.erase(i,1); 
     inputString.erase(i-1,1); 
     opComplete = true; 
    } 
    } 
}