比较 C++ 中的字符串 (.substr()) 和字符 (.back())

Comparing String (.substr()) to Character (.back()) in C++

提问人:Skkk 提问时间:10/4/2022 更新时间:10/4/2022 访问量:79

问:

我正在尝试比较单词“A”的最后一个字母和单词“B”的下一个字母是否相同。

我正在迭代“B”;并在 if 语句中进行比较:

string A = ""
string B = "XYZTTTTLMN"

for (long i = 0; i < B.length(); i++) {

    if ( A.back() != B.substr(i,1) ) { ... }

}

我收到一个错误,说我无法将字符串与字符进行比较。但是,据我所知,A.back() 返回一个字符,B.substr() 返回一个数字字符串,这应该可以吗?

关于我能做什么的任何想法?

非常感谢,谢谢!

C++ 字符串 比较 字符

评论

0赞 康桓瑋 10/4/2022
B.substr(i,1).back()?
0赞 ALX23z 10/4/2022
不,没有直接将字符与字符串进行比较的选项。这是被禁止的编译时。为什么不直接访问字符串的 -th 元素而不是创建完整的字符串?i
1赞 Rishaan Gupta 10/4/2022
std::string::at 可能会更好。F.D.公司A.back() != B.at(i)
1赞 ALX23z 10/4/2022
此外,是一个空字符串,因此访问是 UB。Aback

答:

0赞 saurav 10/4/2022 #1

在 C++ 中,大小=1 的字符串与字符不同。 这就是您收到错误的原因,因为字符串和字符无法像您那样进行比较。

要解决此问题,您可以使用以下代码:

  for (long i = 0; i < B.length(); i++) {

    if ( A.back() != B.at(i) ) { ... }

  }

  for (long i = 0; i < B.length(); i++) {

    if ( A.back() != B[i] ) { ... }

  }

评论

0赞 Remy Lebeau 10/4/2022
当索引不能越界时,就没有必要使用。at()
0赞 saurav 10/4/2022
@RemyLebeau正确,这两种语法中的任何一种都可以在这里使用
0赞 Remy Lebeau 10/4/2022
我不是在评论语法,而是在评论功能。 在运行时执行边界检查,而不执行。当循环已经在处理边界检查时,使用只是浪费开销,没有收益。at()operator[]at()