2015-10-17 66 views
-2

我弄不明白爲什麼這個函數不起作用。 我想返回一個字符串什麼是從char數組傳遞到索引函數,它發現一個識別字符。有什麼明顯的我失蹤了嗎?正因爲如此,這只是返回輸入的第一次迭代的第一個字母的char [] ...通過查找令牌字符來拆分字符數組char

#include <iostream> 
#include <cstring> 

using namespace std; 

string trim(char in[], char token){ 
char A[300]; 
for(int i = 0; i < strlen(in); i++){ 
    if(in[i] != token){ 
    A[i] = in[i]; 
    } else 
    A[i] = '\0'; 
    break; 
} 

    return A; 

} 

int main() 
{ char statement[] = {"weight of car is ?1 ton"}; 
    cout << trim(statement, '?') << endl; 
    return 0; 
} 

回答

1

因爲你break;。使用塊來避免它。

#include <iostream> 
#include <cstring> 

using namespace std; 

string trim(char in[], char token){ 
char A[300]; 
for(int i = 0; i < strlen(in); i++){ 
    if(in[i] != token){ 
    A[i] = in[i]; 
    } else { 
    A[i] = '\0'; 
    break; 
    } 
} 

    return A; 

} 

int main() 
{ char statement[] = {"weight of car is ?1 ton"}; 
    cout << trim(statement, '?') << endl; 
    return 0; 
} 

請注意,調用strlen太多次不是一個好主意。

這應該會更好:

#include <iostream> 

using namespace std; 

string trim(char in[], char token){ 
    char A[300]; 
    bool token_found = false; 
    for(int i = 0; in[i] != '\0'; i++){ 
     if(in[i] != token){ 
     A[i] = in[i]; 
     } else { 
     A[i] = '\0'; 
     token_found = true; 
     break; 
     } 
    } 

    if (token_found) { 
     return A; 
    } else { 
     return in; 
    } 

} 

int main() 
{ char statement[] = {"weight of car is ?1 ton"}; 
    cout << trim(statement, '?') << endl; 
    return 0; 
} 
+0

謝謝,這做到了。我是新來的C++,並沒有意識到你可以把一個條件比較字符到for循環。我會試試看。 – oraz