C++中利用指针反转字符串
题目:编写程序,将字符串反序输出
输入:ABCDEFGHIJK
输出:KJIHGFEDCBA
代码:
过程:
1、在第6行给字符数组赋值;
2、在第8行创建了一个char类型的指针,并给其赋值,其中strlen(s)可以得到字符数组的长度,第1步中我们赋了11个字符,通过下面代码可以得到11:
    cout << strlen(s) << endl;
于数组基数是基于0开始的,所以得到的strlen(s)-1表示s数组的最后一个字符s[10];为了给指针p赋值,为s加&,变成:
    char* p = &s[strlen(s) - 1];
p得到的就是数组s的最后一个字符的内存地址了。
3while循环来输出每个字符,循环执行的条件是p中的内存地址>=s组中的字符内存,也就说只要p不是取的第1个字符,那么这个while条件都是满足的,循环体都会继续执行下去。
4、在第13号输出的是*p,即解引用,输出的是该址的内容,而非地址,果要输出地址,可以使用下面的方式:
cout << (int)p << endl;
括号将类型括起来,显示的就是内地址了。
5、在第14使用p--,来使指针指向上一个内存地址,注意,由于是往前,以是--,如果是往后,那就是++。
6、此题比较精妙的是利用p >- s来作为while的条件虽然对于字符串的反转是有现在的函数的,但这里主要是考验对指针的学习。
整代码:
#include <iostream>
using namespace std;
int main()
{
    char s[] = "ABCDEFGHIJK";
    // p指向最后一个字符的地址
    char* p = &s[strlen(s) - 1];
    // ps的内存地址作为条件
    while (p >= s)
    {
        // 通过解引用输出字符
        cout << *p;
        p--;
    }
    cout << endl;
    system("pause");
    return 0;
}
果字符串是使用string,再来分一下是如何做的:
骤:
1、在6行时,首先创建一个string变。也可以使用cin来获取用户输入的内容
2、第8行中,用于获取字符符个数,这里用的是length()方法,是字符串的方法,前面例题中是字符数组,即char的数组,是用的字符串转数组charstrlen()方法来获取的数组长度。同的,s.length()-1也是因为序列是0,所以要表示最后一个字符,该是用s[总字符数-1]来表示;里指针要是char* p,string* p,通过&s[序],这样就将某个位置的字符的内存地址赋给了p;
3、while条及下面的内容都跟前面例题相同,大家可以看看前面,这里不同的地方就是获取长度使用s.length()。
整代码:
#include <iostream>
using namespace std;
int main()
{
    string s = "ABCDEFGHIJK";
    // 用指针p指向s的最后一个字符
    char* p = &s[s.length() - 1];
    while (p >= s)
    {
        cout << *p;
        p--;
    }
    system("pause");
    return 0;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。