C检查字符串的最后一个字符是否与X相等

时间:2015-03-01 00:15:56

标签: c string arduino

我正在为我的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;
}

有关如何检查的想法吗?

2 个答案:

答案 0 :(得分:1)

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

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

*(s.end()-1)

或:

s[s.size()-1]

如果s真的是C字符串(即char *),则必须使用:

s[strlen(s)-1]

strlen需要读取整个字符串,因此效率不高。

以上所有问题都与s.back()有同样的问题:如果字符串为空,则结果为Undefined Behavior,因此您需要先检查。

答案 1 :(得分:0)

更改此行:

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

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

换行符是'\n'中的CC++javajavascript还有更多......但无论您的语言是什么,可能不应该将换行符添加到字符串中。