C语言 将字符串逆序输出的实例

 更新时间:2021年02月20日 09:42:01   作者:咕嘟咕嘟520  
这篇文章主要介绍了C语言将字符串逆序输出的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

将字符串逆序输出:我先说一个我的错误代码,一开始真的不知道哪里错了,但是当时的想法是自以为是可以的,大家可以先看看我的错误代码

这个代码是错误的,正确的在最下方,不要急,我只是展示一下自己的错误,哈哈

#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;
void reverse(char a[])
{
  char *p=a,*q=a,c;
  int i;
  while(*p!='\0')
    p++;
  p--;//此刻p指向最后一个元素
//  while(p>q)
//  {
//    c=*p;
//    *p=*q;
//    *q=c;
//    p--;
//    q++;
//  }
  i=0;
  for(i=0; p>=q; i++)
  {
    a[i]=*(p);//代码就是这里出的错,在下面解释一下
    printf("*(p)==%c a[%d]==%c\n",*(p),i,a[i]);
    p--;
  }
}
int main()
{
  char a[100];
  scanf("%s",a);
  reverse(a);
  printf("%s",a);
  return 0;
}

上面代码:我一开始想着,定义一个指针p,然后先将指针指向最后一个元素,然后慢慢往回(前面)指,再将指针p指向的值赋给a[i],i从0开始变化,这个想法其实没有错,但是却忽略了,指针只有改变地址的权利,而赋值则是将字符串完全改变了,那么指针一开始指向中间靠后的值的时候,原来a字符串里面中间靠前的字符就会改变(因为是逆着赋值的),那么到了指针p指向中间靠前的时候,p指的是已经变化过的a中的字符值啦。

那么问题来了,怎样做呢,将对称位置的字符交换即可。

下面是正确代码,比较简单,不做过多介绍啦

#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;
void reverse(char a[])
{
  char *p=a,*q=a,c;
  int i;
  while(*p!='\0')
    p++;
  p--;//此刻p指向最后一个元素
  while(p>q)
  {
    c=*p;
    *p=*q;
    *q=c;//交换对称位置的字符值
    p--;
    q++;
  }
}
int main()
{
  char a[100];
  scanf("%s",a);
  reverse(a);
  printf("%s",a);
  return 0;
}

补充:C语言 将字符串转化成整数,正序(逆序)输出

字符串转化为数字:—‘0'

数字转化为字符串:+‘0'

#include <stdio.h>
#include <stdlib.h>
#include <vld.h>
#include <assert.h>
#include <ctype.h>
#include <string.h> 
void Reverse(char *str)  //逆序
{
	char *p = str;
	while(*p != '\0')  //找到\0
	{
		p++;
	}
	p--;  //\0前一位
 
	int temp;
	while(str < p)  
	{
		temp = *str;  //交换
		*str = *p;
		*p = temp;
		str++;
		p--;
	}
} 
 
int Myatoi(const char *str)  //字符串转化为数字
{
	assert(*str != NULL);
	int sum = 0;
	while(isdigit(*str))
	{
		sum = sum*10+*str-'0';
		*str++;
	}
	return sum;
}
 
void Myitoa(char *str,int n)  //数字转化为字符串
{
	assert(*str != NULL);
	int i = 0;
	do{
		str[i++] = n % 10 + '0'; 
		n /= 10;
	}while(n != 0);
	str[i] = '\0';
//	Reverse(str);
}
 
int main()
{
	char str1[100] = "1a2";
	printf("num = %d\n",Myatoi(str1));
	char str[100];
	Myitoa(str,1235496);
	printf("str = %s\n",str);
 
	return 0;
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • 详解Qt使用QImage类实现图像基本操作

    详解Qt使用QImage类实现图像基本操作

    这篇文章主要介绍了Qt如何利用QImage类实现对图像的基本操作,包括图像显示、图像缩放、图像旋转等,感兴趣的小伙伴可以跟随小编一起动手尝试一下
    2022-06-06
  • CMake自动管理C/C++项目的实现

    CMake自动管理C/C++项目的实现

    CMake是一个强大的构建系统,用于跨平台管理C/C++项目的编译过程,本文主要介绍了CMake自动管理C/C++项目的实现,具有一定的参考价值,感兴趣的可以了解一下
    2025-02-02
  • Qt数据库应用之实现通用数据库采集

    Qt数据库应用之实现通用数据库采集

    这篇文章主要为大家介绍了Qt中是如何实现通用数据库采集的,文中的示例代码讲解详细,对我们学习Qt有一定帮助,感兴趣的小伙伴可以了解一下
    2022-03-03
  • 详解应用程序与驱动程序通信DeviceIoControl

    详解应用程序与驱动程序通信DeviceIoControl

    这种通信方式,就是驱动程序和应用程序自定义一种IO控制码,然后调用DeviceIoControl函数,IO管理器会产生一个MajorFunction为IRP_MJ_DEVICE_CONTROL,MinorFunction为自己定义的控制码的IRP,系统就调用相应的处理IRP_MJ_DEVICE_CONTROL的派遣函数
    2021-06-06
  • C语言实现车票管理系统

    C语言实现车票管理系统

    这篇文章主要为大家详细介绍了C语言实现车票管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 详解C++中的函数调用和下标以及成员访问运算符的重载

    详解C++中的函数调用和下标以及成员访问运算符的重载

    这篇文章主要介绍了详解C++中的函数调用和下标以及成员访问运算符,讲到了这些二元运算符使用的语法及重载,需要的朋友可以参考下
    2016-01-01
  • 解析如何用指针实现整型数据的加法

    解析如何用指针实现整型数据的加法

    本篇文章是对用指针实现整型数据加法的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 详解C++11中模板的优化问题

    详解C++11中模板的优化问题

    这篇文章主要介绍了C++11中模板的优化问题,通过实例代码得出结论,当所有模板参数都有默认参数时,函数模板的调用如同一个普通函数,具体示例代码跟随小编一起看看吧
    2021-09-09
  • C++数据结构哈希表详解

    C++数据结构哈希表详解

    C++标准库中使用的unordered_map底层实现是哈希表,下面这篇文章主要给大家介绍了关于C++中使用哈希表(unordered_map)的一些常用操作方法,需要的朋友可以参考下
    2022-07-07
  • C语言进阶之内存操作函数详解

    C语言进阶之内存操作函数详解

    这篇文章主要为大家学习介绍了C语言中内存操作函数(memcpy、memmove和memcmp)的使用,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-07-07

最新评论