以下所有题都是用指针实现的,你可能会想,这些题目不用指针也可以写出来,干嘛要多次一举呢?非也,这些只是初级指针,先把基础打好,后来指针的用途可大着呢,可以解决很多其他方法解决不了的问题,所以一起来和菜菜看看下面的题吧~
目录
//递减输出三个整数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a, b, c;
printf("请输入三个整数:");
scanf("%d%d%d", &a, &b, &c);
int* pa, * pb, * pc, * tmp;
pa = &a;
pb = &b;
pc = &c;
if (*pa < *pb)
{
tmp = *pa;
*pa = *pb;
*pb = tmp;
}
if (*pa < *pc)
{
tmp = *pa;
*pa = *pc;
*pc = tmp;
}
if (*pb < *pc)
{
tmp = *pb;
*pb = *pc;
*pc = tmp;
}
printf("递减排列为 %d %d %d\n", *pa, *pb, *pc);
return 0;
}
//逆序打印字符串
输入字符串:1>gets(arr);2>scanf("%[^\n]",arr) 直到读到\n结束
这里我们就使用gets了,简洁明了。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
void reverse(char* str)
{
int left = 0;
int right = strlen(str) - 1;
while (left < right)
{
char tmp = *(str + left);
*(str + left) = *(str + right);
*(str + right) = tmp;
left++;
right--;
}
}
int main()
{
char arr[100000];
printf("请输入一个字符串:");
gets(arr);
reverse(arr);
printf("%s", arr);
return 0;
}
这种写法可能有点啰嗦,且还是用到了下标,我们再来用纯指针试一试:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
void reverse(char* str)
{
char* left = str;
char* right = str + strlen(str) - 1;
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main()
{
char arr[100000];
printf("请输入一个字符串:");
gets(arr);
reverse(arr);
printf("%s", arr);
return 0;
}
· 不使用C语言字符串库函数,编程输入一个只包含字母和*号的字符串有以下要求:
//删除其前导星号,中部和尾部不得删除
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
char arr[30];
printf("请输入一个字符串:");
gets(arr);
char* p = arr;
while (*p == '*')//直到指向非 * 的位置
{
p++;
}
while (*p)//打印之后的所有字符
{
printf("%c", *p);
p++;
}
return 0;
}
//删除其前导和尾部星号,中间星号不得删除
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
char arr[30];
printf("请输入一个字符串:");
gets(arr);
char* p1 = arr;//指向第一个非*字符
char* p2 = arr;//先指向字符串结束符'\0'
//后指向尾部第一个非*字符
//寻找第一个非*字符
while (*p1 == '*')
{
p1++;
}
//寻找字符串结束符'\0'
while (*p2)
{
p2++;
}
//寻找尾部第一个非*字符
p2--;
while (*p2 == '*')
{
p2--;
}
//打印中间所有字符
printf("删除后的字符串为:");
for (; p1 <= p2; p1++)
{
printf("%c", *p1);
}
return 0;
}
//删除其中间星号,前导和尾部星号不得删除
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
char arr[30];
printf("请输入一个字符串:");
gets(arr);
char* p1 = arr;//指向第一个非*字符
char* p2 = arr;//先指向字符串结束符'\0'
//后指向尾部第一个非*字符
char* p3 = arr;
//寻找第一个非*字符
while (*p1 == '*')
{
p1++;
}
//寻找字符串结束符'\0'
while (*p2)
{
p2++;
}
//寻找尾部第一个非*字符
p2--;
while (*p2 == '*')
{
p2--;
}
//分三段打印
printf("删除后的字符串为:");
while (*p3 == '*')
{
printf("%c", *p3);
p3++;
}
while (p1 <= p2)
{
if (*p1 != '*')
{
printf("%c", *p1);
}
p1++;
}
p2++;
while (*p2)
{
printf("%c", *p2);
p2++;
}
return 0;
}
//用指针编程复制字符串,要求每复制三个字符后插入一个空格
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
char arr1[100];
char arr2[100];
printf("请输入一个字符串:");
gets(arr1);
char* p1 = arr1;
char* p2 = arr2;
int i = 1;
for (p1 = arr1, p2 = arr2; *p1 != '\0'; i++)
{
if (i % 4 == 0)
{
*p2 = ' ';
p2++;
}
else
{
*p2 = *p1;
p1++;
p2++;
}
}
*p2 = '\0';
printf("复制后的字符串为:");
puts(arr2);
return 0;
}
//输入一行字符,统计其中单词的个数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
char arr[100];
printf("请输入一行字符:");
gets(arr);
int count = 0;
char* p = arr;
while (*p)
{
if (*p == ' ')
{
count++;
}
p++;
}
printf("有%d个单词\n", count+1);
return 0;
}
That's all , see you next blog!