字符串比较中的C++字符
C++ character in string comparision
我熟悉c++,但不知道如何比较来自相同或不同字符串的索引字符。这里有一个回文示例,它使用int并通过字符串流将其转换为字符串。
bool ispalindrome(int a) {
stringstream stream;
stream<<a;
string str = stream.str();
int length = str.length();
int offset = length - 1;
for (int i=0; i<=offset; i++ && offset--) {
if (str[i] == str[i + offset]) {
return false;
}
offset--;
}
return true;
}
由于某种原因,这总是被评估为false。我不认为null终止与此有关,因为它不是按长度报告的,所以我想我一定使用了错误的比较方法。我似乎找不到像strncmp这样只有单个字符的东西。
[编辑:固定标题]
我不知道你是怎么写那个循环的,但我很确定它应该是
for (int i=0; i<=offset; i++, offset--) {
if (str[i] != str[offset]) {
return false;
}
}
您可以使用迭代器:
std::string::iterator start = str.begin();
std::string::reverse_iterator end = str.rbegin();
int halfWay = str.length() / 2;
for (int i = 0; i <= halfWay; i++, start++, end++)
{
if (*start != *end)
return false;
}
return true;
免责声明:未经测试,但我也不太擅长C++!
可能使用逗号、
for (int i=0; i<=offset; i++ ,offset--)
更平常吗?
否则,
if (str[i] == str[i + offset]) {
使用"!="会更好而不是"=="
但是,对于一个简单的样本,我看不出的"总是错误的"行为
int main() {
for ( int i = 0; i < 1000; ++i )
cout << i << " = " << ispalindrome(i) << endl;
}
您的检查条件应该是:
if (str[i] != str[i + offset]) {
^--here
如果只是检查回文,也可以使用STL 中的reverse
#include <algorithm>
#include <string>
bool isPalinDrome = false;
std::string mystr = "cnc";
std::string mystrcpy = mystr;
std::reverse(mystrcpy.begin(),mystrcpy.end());
if(mystr == mystrcpy)
isPalindrome = true;
但如果你只是在比较各个角色,那么上面的答案已经告诉你如何去做了。因此,重申一下,您只需要遍历字符串的一半即可。
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何在C++中从字符串中分割字符
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 指向指向字符数组的指针数组的指针
- 如何用转义符替换字符串中的所有特殊字符
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 比较字符数组
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存