1、以单词为单位,进行逆置
"hello 22111 student"====>"student 22111 hello"
#include <stdio.h>
#include <string.h>
void rev(char a[],int i,int j){
char t;
while(i<j){
t=a[i];a[i]=a[j];a[j]=t;
i++;
j--;
}
}
int main(int argc, const char *argv[])
{
char a[50]="hello 22111 student";
int i=0,j=strlen(a)-1;
rev(a,i,j);
i=0,j=0;
while(a[i]!='\0'){
while(a[j]!=' '&& a[j]!='\0'){
j++;
}
rev(a,i,j-1);
while(a[j]==' '){
j++;
}
i=j;
}
printf("a=%s\n",a);
return 0;
}
结果为
2、使用指针实现字符串逆置
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
char a[20]="hello",t;
char *p=a;
char *q=a+strlen(a)-1;
while(p<q){
t=*p;
*p=*q;
*q=t;
p++;
q--;
}
printf("a=%s\n",a);
return 0;
}
结果为
3、使用指针计算每一位数字的和
"fa4621"====>4+6+2+1=13
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
char a[30]="fa4621";
char *p=a;
int n=strlen(a);
int i,sum=0;
for(i=0;i<n;i++){
if(*p!='\0'){
p++;
if(*p-48<10 && *p-48>0){
sum+=*p-'0';
}
}
}
printf("sum=%d\n",sum);
return 0;
}
结果为
4、分析以下指针
int a=100;
int *p=&a;
1)*p++;
先取值为100,指针再向后移动一个字节
2)*++p;
先向后移动一个字节,再取值,这个值是随机的
3)*(p+2);
先向后移动8个字节,再取值,值随机
4)*p-2;
先取值,对值减2
5)&p+1;
对指针地址进行偏移8个字节
6)--*p;
先取值,再对值减1,结果为99
7)&a+1;
表示地址向后偏移4个字节
8)&a--;
报错