使用c语言代码反转一个整数(字符串)并输出结果

目录

反转整数的完整代码

 反转字符串的完整代码

     代码详解

reverseString(char* str)代码详解

str[strcspn(str, "\n")] = '\0';代码详解 

     为什么需要做这个替换呢?

     那为啥不直接把fgets替换成scanf呢?


反转整数的完整代码

下面是一个使用 C 语言编写的反转整数的程序,它可以读入一个整数,然后将该整数反转,并输出结果: 

#include <stdio.h>

int reverse(int num) {
    int rev_num = 0;

    while (num != 0) {   
        rev_num = rev_num * 10 + num % 10;
        num /= 10;
    }

    return rev_num;
}

int main() {
    int num;

    printf("Enter a number: ");
    scanf("%d", &num);

    int rev_num = reverse(num);

    printf("Reversed number is: %d\n", rev_num);

    return 0;
}

       在这个程序中,我们首先定义了一个 reverse 函数,它接受一个整数作为参数,并返回反转后的整数。在函数内部,我们使用一个循环遍历该整数的每一位数字,并将它们按照相反的顺序组合成一个新的整数。具体来说,我们首先把 rev_num 初始化为 0,然后每次取出原数的最后一位数字并加入到 rev_num 中,接着将原数除以 10 并继续进行循环,直到原数变成 0 为止

        在主函数中,我们使用 scanf 函数读入一个整数,并调用 reverse 函数将其反转。最后,我们输出反转后的整数。

 反转字符串的完整代码

#include <stdio.h>
#include <string.h>

void reverseString(char* str) 
{
    int length = strlen(str);
    int start = 0;
    int end = length - 1;

    while (start < end) 
   {
        // 交换首尾字符
        char temp = str[start];
        str[start] = str[end];
        str[end] = temp;

        // 移动指针
        start++;
        end--;
    }
}

int main() 
{
    char str[100];

    printf("请输入一个字符串:");
    fgets(str, sizeof(str), stdin);

    // 去除输入字符串的换行符
    str[strcspn(str, "\n")] = '\0';

    reverseString(str);

    printf("反转后的字符串为:%s\n", str);

    return 0;
}

(这里fgets函数在莫莫子的小写字母转换成大写字母的博客中详细讲过,并有具体的例子)

     代码详解

在上述代码中,我们定义了一个 reverseString 函数,用于反转字符串。该函数接受一个字符串作为参数,并通过交换首尾字符来实现反转。

在主函数中,我们先从用户处获取一个输入字符串,并使用 fgets 函数来保证输入的字符串不会超出预设的长度(这里设定为 100)。

接下来,我们调用 reverseString 函数对输入的字符串进行反转操作

最后,我们通过 printf 函数输出反转后的字符串。

请注意,上述程序假设输入的字符串长度不超过 100。如果需要处理更长的字符串,可以适当调整 str 数组的大小。

reverseString(char* str)代码详解

在 C 语言中,字符串本质上是一个字符数组,以空字符 '\0' 结尾。因此,在将字符串作为函数参数传递时,通常使用指向字符数组第一个元素的指针来表示字符串

在函数声明中,我们可以将参数类型定义为 char*,表示一个指向字符的指针。在函数内部,我们可以通过该指针来访问整个字符数组,并对其进行操作。

例如,在上述反转字符串的程序中,我们定义了一个 reverseString 函数,它接受一个字符串作为参数:

void reverseString(char* str) {
    // ...
}

在函数内部,我们通过指针 str 来访问字符串中的每个字符

char temp = str[start];
str[start] = str[end];
str[end] = temp;

当我们在主函数中调用该函数时,可以直接将字符串的地址传递给函数

char str[100];
// ...
reverseString(str);

这里,str 数组名实际上是一个指向数组第一个元素的指针。因此,将 str 传递给函数时,实际上传递的就是一个指向字符数组的指针

总之,使用指针来表示字符串是 C 语言中的惯用做法,它能够简化代码并提高程序的效率。

str[strcspn(str, "\n")] = '\0';代码详解 

strcspn 函数可以用来查找字符串中第一个匹配指定字符集的字符,并返回该字符在字符串中的位置。因此,str[strcspn(str, "\n")] 表达式可以用来查找字符串 str 中第一个换行符 '\n' 的位置,并将其替换为字符串终止符 '\0'

     为什么需要做这个替换呢?

原因是在使用 fgets 函数获取用户输入时,输入字符串中可能包含换行符(用户按下回车键)。如果不去除这个换行符,后续对字符串进行操作时就会出现问题。

总而言之,这段代码的目的是处理 fgets 函数读取字符串时带来的换行符问题,以确保后续对字符串的操作能够正确进行

     那为啥不直接把fgets替换成scanf呢?

(为啥这么问呢,请看莫莫子的小写字母转换成大写字母的博客里主要讲的就是这个)

使用 scanf 函数和 fgets 函数获取用户输入都是可以的,但是它们有各自的适用场景和注意事项。

  1. fgets 函数适用于获取包含空格的字符串输入fgets 可以一次性读取一整行输入(包括空格),并将完整的输入存储到指定的字符数组中

  2. scanf 函数也可以用来获取用户输入,但是它在处理空格时会有一些限制。具体而言,scanf 在遇到空格、制表符换行符时会停止读取,因此无法一次性获取包含空格的完整行输入

在反转字符串的程序中,如果要求用户输入包含空格的字符串,推荐使用 fgets 而不是 scanf因为 fgets 可以正确地获取包含空格的完整行输入。

总之,虽然 scanffgets 都可以用来获取用户输入,但是在处理包含空格的字符串输入时,推荐使用 fgets

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~莫子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值