我正在为我的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;
}
有关如何检查的想法吗?
答案 0 :(得分:1)
在C ++中,std::string
的最后一个字符是s.back()
(如果字符串为空则为UB,请先检查。)我知道您的问题标记为c,但是代码本身正在使用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'
中的C
,C++
,java
,javascript
还有更多......但无论您的语言是什么,可能不应该将换行符添加到字符串中。