通过查找令牌 char 拆分 char 数组

split a char array by finding a token char

我不明白为什么这个功能不起作用。 我想 return 一个从 char 数组中删除的字符串,该字符串传递到函数的索引处,它找到了一个标识字符。有什么明显的我想念的吗?实际上,这只是 return 输入 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] = '[=10=]';
    break;
}

  return A;

}

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

因为您 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] = '[=10=]';
    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] != '[=11=]'; i++){
      if(in[i] != token){
        A[i] = in[i];
      } else {
        A[i] = '[=11=]';
        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;
}