使用string,指针和数组 三种方法 实现回文检测

使用>> 的字符串读取(缺省)会被空格所终止;也就是它只能读取一个单词。


指针问题

不要用空指针进行数据访问:
int* p = nullptr;
*p = 7; // 糟糕


回文

回文是一种单词,它顺序拼写和逆序拼写的结果是相同的。
例如:anna petep malayalam

有两种方法判断一个单词是否是回文:
获得单词逆序拼写的副本,并将其与原单词进行比较。
判断单词的首字符与尾字符是否相同,然后判断第二个字符与倒数第二个字符是否相同,继续比较下去
直到到达单词的中央。

使用string实现回文

bool is_palindrome(const string& s)
{
    int first = 0; //首字符索引
    int last = s.length() - 1; //尾字符索引
    while(first < last)
    {
        if (s[first] != s[last]) return false;
        ++first; //向前移动
        --last; //向后移动
    }
    return true;
}

使用数组实现回文
bool is_palindrome(const char s[], int n)
{
    int first = 0; //首字符索引
    int last = n - 1; //尾字符索引
    while(first < last)
    {
        if (s[first] != s[last]) return false;
        ++first; //向前移动
        --last; //向后移动
    }
    return true;
}

使用指针实现回文
bool is_palindrome(const char* first, const char* last)
{
 
    while(first < last)
    {
        if (*first != *last) return false;
        ++first; //向前移动
        --last; //向后移动
    }
    return true;
}

你可能感兴趣的:(C++)