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的最后一个字符的内存地址了。
3、用while循环来输出每个字符,循环执行的条件是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];
// p与s的内存地址作为条件
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小时内删除。
发表评论