字符串(数字)逆序、统计字符串中数字字符个数

设计返回指针值的函数,将输入的一个字符串按逆向输出。

错误代码:

#include <iostream>
using namespace std;
char* reverse(char*);

int main() {
    char str[100],*p;
    cin >> str;
    p = str;
    cout << *reverse(p);            //输出字符数组最后一个元素
    do{
        p--;                        //p指针向前移位
        cout << *p;                 //输出*p
    } while (p != str);             //如果p指向数组第一个元素,则跳出循环
    cout << *p;                     //输出字符数组第一个元素
    return 0;
}
char* reverse(char* a) {
    while (*(a + 1) != '\0') {      //让a指针指向字符数组最后一个元素(不包括\0)
        a++;
    }
    return a;
}

错因:

调用reverse(p)时,实际上给函数传递的是p的地址,a指向p的地址,但p(主函数中的局部变量)的指向并不会改变。

正确代码:

#include <iostream>
using namespace std;
char* reverse(char*);

int main() {
    char str[100],*p;
    cin >> str;
    p = str;
    p = reverse(p);        //让p指向字符数组最后一个元素(不算'\0')
    cout << *p;            //输出字符数组最后一个元素
    do{
        p--;                        //p指针向前移位
        cout << *p;                 //输出*p
    } while (p != str);             //如果p指向数组第一个元素,则跳出循环(特别注意此时第一个元素已经输出完了)
    return 0;
}
char* reverse(char* a) {
    while (*(a + 1) != '\0') {      //让a指针指向字符数组最后一个元素(不包括\0)
        a++;
    }
    return a;
}

统计字符串中数字字符个数

#include <iostream>
using namespace std;

int main() {
    int n = 0, c;
    do{
        c = getchar();
        if (c >= 48 && c <= 57) {
            n++;
        }
    } while (c != '\n');
    cout << n;
    return 0;
}

编写一段将n个数按输入顺序的逆序排列输出的程序,要求应用指针且不另外开设数组。

#include<stdio.h>
#define maxsize 200

int main()
{
	int a[maxsize],n,data,*p;
	p = a;
	printf("您将输入多少个数:\n");
	scanf_s("%d", &n);
	printf("请输入数据:");
	for (int i = 0;i<n; i++) {
		scanf_s("%d", &data);
		a[i] = data;
		p++;
	}
	p--;
	do {
		printf("%d ", *p);
		p--;
	} while ((p != a));
	printf("%d ", *p);
	return 0;
}

特别注意:

输入:

6

1 2 3 8 32 30

输出:

30 32 8 3 2 1

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值