2014-02-21 50 views
1

我有一個函數,需要兩個字符串,並確定它們是否相同。我試圖標記字符串並將所有的標記合併爲一個字符串。這是我到目前爲止,我得到總線錯誤:10。
任何幫助表示讚賞。獲取總線錯誤:10與字符串附加

#include <iostream> 
    #include <string> 
    using namespace std; 

    bool stringCheck(string s1, string s2){ 
    string strCheck1 = ""; 
    string strCheck2 = ""; 

    char *cstr1 = new char[s1.length()]; // char array with length of string 
    strcpy(cstr1, s1.c_str()); // copies characters of string to char array 

    char *cstr2 = new char[s2.length()]; 
    strcpy(cstr2, s2.c_str()); 

    char *p1 = strtok(cstr1, " "); // creates a char array that stores token that 
            // is delimeted 
    cout << "p1 " << p1 << endl; ///outputs token that is found 

    strCheck1.append(p1);      // appends token to string 
    cout << "strCheck1 " << strCheck1 << endl; // outputs string 

    while(p1 != NULL)    // while the token is not a null character 
    { 
     cout<<"parsing" << endl;  
     p1 = strtok(NULL, " ");  // continue to parse current string. 
     cout << "p1 " << p1 << endl; 
     strCheck1.append(p1); 
     cout << "str1 " << strCheck1 << endl; 
    } 

    char * p2 = strtok(cstr2, " "); 
    cout << "p2 " << p2 << endl; 
    strCheck2.append(p2); 
    cout << "strCheck2 " << strCheck2 << endl; 

    while(p2 != null){ 
     p2 = strtok(NULL, " "); 
     strCheck2.append(p2); 
     cout << "str2 " << strCheck2 << endl; 
    } 

    if(strCheck1.compare(strCheck2) != 0) 
    { 
     return 0; 
    } 
    else return 1; 
} 

int main(void){ 
    string s1 = "jam yoooo jay"; 
    string s2 = "jam yoooo"; 
    if(stringCheck(s1, s2) == 1){ 
     cout << "strings same"<< endl;; 
    } 
    else{ 
     cout << "strings not same" << endl; 
    } 

} 

是有一個條件語句,我可以配對了

while(p1 != NULL) 

我知道這是一個非常愚蠢的功能,但只是想提高我的技能。任何幫助感激!

回答

0

有一些東西,你必須改變:

  • char *cstr1 = new char[s1.length()];

    C-字符串都是空終止的,所以你需要多一個字符來存儲空字符:

    char *cstr1 = new char[s1.length() + 1];

    (與cstr2相同)

  • strCheck1.append(p1)

    p1不能是空指針(參見Assign a nullptr to a std::string is safe?進一步的細節)。所以,你必須檢查...

    if (p1) strCheck1.append(p1);

    (同爲p2)。

  • cout << p1 << endl

    如果p1是一個空指針不好的事情都可能發生(見Why does std::cout output disappear completely after NULL is sent to it)。所以,你必須檢查...

    if (p1) { cout << "p1 " << p1 << endl; strCheck1.append(p1); }

    (同爲p2

  • 存在內存泄漏(cstr1/cstr2必須刪除)。

最後它應該工作。

也許你應該考慮其他系統來提取令牌(你不必混合使用std :: string和c-string)。例如:

#include <iostream> 
#include <string> 
#include <sstream> 

int main() 
{ 
    std::string text("text-to-tokenize"); 
    std::istringstream iss(text); 
    std::string token; 

    while(getline(iss, token, '-')) 
    std::cout << token << std::endl; 

    return 0; 
} 
+0

非常感謝。聽起來真的很有幫助。我再試一次吧! – user2196667