多种方式实现字符串/无符号数反向输出_栈_递归_头尾指针

本文介绍了三种不同的技术来实现字符串的反转:使用递归函数输出无符号数的反向形式,利用栈的数据结构特性反转字符序列,以及通过设置头尾指针并交换它们所指向的字符来完成字符串反转。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、递归调用方式实现无符号数反向输出

C语言实现(DEV c++4.9.9.2运行通过)
#include<stdio.h>

void reverse_print(unsigned long num)
{
    if(num==0)
        return;
    printf("%d",num%10); //输出最低位 
    reverse_print(num/10);//递归调用,依次输出最低位
}

int main(void)
{
    unsigned long num=12345678;
    reverse_print(num);
    printf("\n");
    system("PAUSE");
    return 0;
}


2、栈实现字符串的反转
C++实现,用C语言实现需要自己定义栈(DEV c++4.9.9.2运行通过)
#include<iostream>
#include<stack>
using namespace std;

int main()
{
    stack<char> s;
    char n;
    cout<<"输入需要反转的字符串:"<<endl;
    n=getchar();
    while(n!='\n')
    {
        s.push(n);
        n=getchar();                      
    }
    while(!s.empty())
    {
         cout<<s.top();  
         s.pop();                            
     }
     cout<<endl;
     system("pause");
     return 0;   
}

3、设立头尾指针实现字符串反向输出

C语言实现(DEV c++4.9.9.2运行通过)

#include<stdio.h>
char *converse(char *str);

int main(int argc,char *argv[]) 
{
    char str[10];
    int a = 1234567;
    sprintf(str, "%d", a); //将整型数转换为char型数组
   // printf("%s\n", s);
   // char str[] = "1234567890zxcvbnma"; //需要转换的字符串数组 
    char *sdest;
    printf("before converse:str= %s \n",str);
    sdest = converse(str); 
    printf("after converse:str= %s \n",sdest);    
    system("PAUSE");
    return 0; 
} 

char *converse(char *str) 
{ 
    char temp; 
    char *s1 = str;  //s1:头指针
    char *s2 = str+strlen(str)-1;//s2:尾指针 
 
    //头指针和尾指针交换指向的值,并向中间移动,直到相遇
    for(;s1 < s2;s1++,s2--) 
    { 
        temp = *s1; 
        *s1 = *s2; 
        *s2 = temp; 
    } 
   
    return str; 
}  



1.自定义容器:FlexibleList 功能概述:实现一个类似于std:list的双向链表容器FlexibleList,但它能够支持动态类型存储(可以存 储不同类型的数据),即在一个链表中存储如int、double、std::string等不同类型的数据 构造函数:提供默认构造函数、拷贝构造函数和带初始元素的构造函数。 插入操作:实现push_front、push_back、insert等方法,将元素插入到链表的不同位置。 删除操作:实现pop_front、pop_back、erase等方法,从链表中移除元素。 访问操作:提供front、back方法获取链表的首尾元素,以及支持迭代器遍历链表。 内存管理:确保在插入和删除元素时,能够正确管理内存,避免内存泄漏。 2.自定义算法:AdvancedSort 功能概述:实现一个高级排序算法AdvancedSort,它可以对FlexibleList中的元素进行排序,默认设计 2个参数,一个参数表示对FlexibleList中特定的类型进行排序,第二个参数表示排序规则,该规则需要 支持多种排序规则,如升序、降序,并且可以根据元素的自定义属性进行排序。 模板实现:使用模板编程,使算法可以处理不同类型的元素。 自定义比较函数:允许用户传入自定义的比较函数,以实现灵活的排序规则。 效率优化:尽量采用高效的排序算法,如快速排序或归并排序,确保排序时间复杂度尽可能的小。 3.自定义迭代器:Flexiblelterator 功能概述:为FlexibleList实现自定义迭代器Flexiblelterator,使其能够像STL容器的迭代器一样工 作,支持++、--、*等操作。 具体要求:双向迭代:支持正向和反向迭代,即可以使用++和操作符移动迭代器。 解引用操作:通过*操作符可以访问迭代器指向的元素。 范围for循环支持:使FlexibleList能够使用范围for循环进行遍历。 示例用法 struct Person { std::string name; int age; }; Person p1C"jack",20); Person p2("rose",30); FlexibleList dbList = {100,200,30,3.14,9.87,27,39,15,"test","hello",p1,p2,p3}; bool ascending(int a,int b){ return a > b; } AdvancedSort(dbList.begin(),dbList.end(),typeid(int));//默认升序排序 AdvancedSort(dbList.begin(),dbList.end(),typeid(int),ascending); print_AdvancedSort(dbList,typeid(int));//只输出对应的数据即可。 bool ascending (Person &t1,Person &t2) { return t1.age > t2.age; } AdvancedSort (dbList.begin(),dbList.end(),typeid(Person),ascending); print_Advancedsort(dbList,typeid(Person));//按照排序输出一行数据就行,按照上述需求和使用示例来完成整个代码,确保代码可以正确运行
最新发布
03-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值