2015-10-17 52 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

相关问题