【问题标题】:C check if last character of string is equal with XC检查字符串的最后一个字符是否等于X
【发布时间】:2015-03-01 00:15:56
【问题描述】:

我正在为我的 arduino 写一个草图,我想检查我的字符串的最后一个字符。

例如:

如果输入是cats-,我想看看最后一个字符(在我的例子中是“-”)是否是实际的 -

我使用的代码:

串行事件函数

void serialEvent() {
 while (Serial.available()) {
  // get the new byte:
  char inChar = (char)Serial.read(); 
  // add it to the inputString:
  inputString += inChar;
  // if the incoming character is a newline, set a flag
  // so the main loop can do something about it:
  if (inChar == '.') {
    stringComplete = true;
  } 
 }
}

这是通过检查输入是否与- 相等来检查输入字符串是否完成。但是,这仅适用于控制台,因为我使用的 python 脚本将所有内容一起发送

void loop() {
 if (stringComplete) {
 Serial.println(inputString);
 display.clearDisplay();
 display.setTextSize(1);
 display.setCursor(0,0);
 display.println("Altitude:");
 display.println(inputString);
 display.display();
 // clear the string:
 inputString = "";
 stringComplete = false;
}

知道如何检查吗?

【问题讨论】:

  • 为什么这个标签是 Python?
  • if (inputString[strlen(inputString) - 1] == '-')?
  • 我认为您的“== '.'”在这里只是一个错字,实际上在您的代码中是“== '-'”?
  • 抱歉,您似乎遗漏了关键点,即 这不是有效的 C 语法。不管你有没有意识到,它一定是 C++。
  • 这一行:'inputString += inChar;',在 C 中,不会将字符附加到字符串。将字符附加到 inputString 的地址的作用是什么。如果您启用了所有编译器警告,它会告诉您有问题。一个可用的方法是: inputString[strlen(inputString)+1] = '\0'; inputString[strlen(inputString)] = inChar;仅当代码在插入字符之前跳过将 inputString[] 缓冲区清除为所有 '\0' 时才需要第一条语句

标签: c string arduino


【解决方案1】:

在 C++ 中,std::string 的最后一个字符是 s.back()(如果字符串为空,请先检查。)我知道您的问题标记为 ,但代码本身使用的是 @987654324 @ 所以我想它真的是 C++。

back() 成员函数,类似于std::vector 等序列容器中的同名成员函数,是在 C++11 中正式添加的,因此它可能存在也可能不存在。如果不是,您可以使用:

*(s.end()-1)

或:

s[s.size()-1]

如果 s 真的是一个 C 字符串(即 char *),您将不得不使用:

s[strlen(s)-1]

但是strlen需要读取整个字符串,所以效率不高。

以上都遇到了和s.back()一样的问题:如果字符串为空,结果是Undefined Behaviour,所以你需要先检查一下。

【讨论】:

    【解决方案2】:

    改变这一行:

    if (inChar == '.') {
        stringComplete = true;
    } 
    

    if (inChar == '\n') {
        stringComplete = true;
    } 
    

    CC++javajavascript 中,换行符是'\n' 等等...但是无论您的语言是什么,您可能都不应该在字符串中添加换行符.

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 2017-05-24
      • 2021-12-08
      • 2014-07-29
      • 1970-01-01
      • 2020-07-15
      • 2013-01-06
      • 1970-01-01
      相关资源
      最近更新 更多