通过查找标记char来拆分char数组

时间:2015-10-17 02:18:33

标签: c++ arrays char comparison c-strings

我无法弄清楚为什么这个功能不起作用。 我想返回一个字符串,该字符串是从传入函数的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 个答案:

答案 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;
}