【问题标题】:split a char array by finding a token char通过查找标记 char 来拆分 char 数组
【发布时间】:2015-10-17 02:18:33
【问题描述】:

我不知道为什么这个功能不起作用。 我想返回一个字符串,该字符串是从传递给函数的 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;
}

【问题讨论】:

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


    【解决方案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;
    }
    

    【讨论】:

    • 谢谢,成功了。我是 C++ 新手,没有意识到您可以将比较字符的条件放入 for 循环中。我会试试看。
    猜你喜欢
    • 2023-04-10
    • 2012-02-25
    • 2017-10-27
    • 2019-08-16
    • 2020-08-19
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多