【发布时间】:2020-08-28 06:47:52
【问题描述】:
我想知道如何检查一个单词是否是结构数据类型或对象中的回文,无论你想如何称呼它。我想从文件中读取数据,然后我需要检查我读过的那种单词是否是回文。我也需要颠倒单词的顺序,但我这样做了,所以不需要任何帮助。
代码如下:
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
struct lettersStr
{
string name;
string object;
};
int main(int argc, char** argv)
{
ifstream letter;
letter.open("letter.txt");
lettersStr things[200];
int numberOfThings= 0;
while(letter >> letter[numberOfThings].name >> letter[numberOfThings].object)
{
numberOfThings++;
}
for (int i = 0; i < numberOfThings; i++)
{
cout << letter[i].name << " " << letter[i].object<< endl;
}
string names;
for (int i = 0; i < numberOfThings; i++)
{
names= things[i].name;
}
for (int i = numberOfThings- 1; i >= 0; i--)
{
cout << things[i].name << endl;
}
bool x = true;
int j = names.length() - 1;
for (int i = 0; i < j; i++,j--)
{
if (things[i].name.at(i) != things[i].name.at(j))
x = false;
if (x)
{
cout << "String is a palindrome ";
}
else
cout << "String is not a palindrome";
}
这是cout:
Kayak Audi
Ahmed Golf7
Ahmed
Kayak
String is not a palindrome
String is not a palindrome
我认为主要的问题是:
for (int i = 0; i < j; i++,j--)
{
if (things[i].name.at(i) != things[i].name.at(j))
x = false;
如您所见,它不会找到检查单词是否为回文的正确方法。 P.S:如果这是一个愚蠢的问题,我很抱歉,我是 C++ 编程的初学者。 干杯
【问题讨论】:
-
没有愚蠢的问题,但不太清楚是什么问题。代码有什么问题?预期的输出是什么?
-
看看例子@std::equal。它可以很好地进行回文检查。
-
你有
for (int i = 0; i < j; i++,j--),然后是if (things[i].name.at(i) != things[i].name.at(j))。这个循环应该遍历things还是遍历onename?它不能同时进行。 -
@churill 是的,我希望它只通过名称循环
-
是的,但请仔细看看这个循环现在在做什么。您应该使用单独的函数来检查字符串是否为回文。
标签: c++ arrays struct types palindrome