鱼C论坛

 找回密码
 立即注册
查看: 956|回复: 5

[已解决]不对

[复制链接]
发表于 2023-11-26 11:28:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。

为啥代码不能让字符逆转
#include <stdio.h>
#include<string.h>
int main() {
    char str[100];
    gets(str);
    int len = strlen(str);
    for (int i = 0; i < len; i++) {
        char temp = str[i];
        str[i] = str[len - 1 - i];
        str[len - 1 - i] = temp;
    }
    printf("%s", str);

    return 0;
}
最佳答案
2023-11-26 11:29:02
你的代码存在一些问题。我来给你解释一下并提供正确的代码。

首先,你定义的字符变量str应该是一个字符串数组,而不是单个字符。所以要修改为`char str[101];`,这样就可以存储最大长度为100(加上末尾的'\0')的字符串了。

其次,你使用的是`gets`函数来读取字符串,但是这个函数已经被废弃了,因为它不安全。你可以使用`fgets`函数来读取字符串,并指定最大读取的字符数为`100`,这样就不会超出数组的范围了。

然后,你在颠倒字符串的循环中,交换字符的代码有问题。你需要交换的是`str[i ]`和`str[len-1-i]`,而不是`str`本身。可以使用一个临时变量来完成交换操作。

最后,你在打印字符串的时候,应该使用`puts`函数而不是`printf`函数。因为`puts`会自动在末尾添加换行符。

下面是修改后的代码:
#include <stdio.h>
#include <string.h>

int main() {
    char str[101];
    fgets(str, 100, stdin);
    int len = strlen(str);
    for (int i = 0; i < len / 2; i++) {
        char temp = str[i];
        str[i] = str[len - 1 - i];
        str[len - 1 - i] = temp;
    }
    puts(str);

    return 0;
}

现在你可以输入一个字符串,然后代码会将其倒序输出。希望对你有帮助!

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-26 11:29:02 | 显示全部楼层    本楼为最佳答案   
你的代码存在一些问题。我来给你解释一下并提供正确的代码。

首先,你定义的字符变量str应该是一个字符串数组,而不是单个字符。所以要修改为`char str[101];`,这样就可以存储最大长度为100(加上末尾的'\0')的字符串了。

其次,你使用的是`gets`函数来读取字符串,但是这个函数已经被废弃了,因为它不安全。你可以使用`fgets`函数来读取字符串,并指定最大读取的字符数为`100`,这样就不会超出数组的范围了。

然后,你在颠倒字符串的循环中,交换字符的代码有问题。你需要交换的是`str[i ]`和`str[len-1-i]`,而不是`str`本身。可以使用一个临时变量来完成交换操作。

最后,你在打印字符串的时候,应该使用`puts`函数而不是`printf`函数。因为`puts`会自动在末尾添加换行符。

下面是修改后的代码:
#include <stdio.h>
#include <string.h>

int main() {
    char str[101];
    fgets(str, 100, stdin);
    int len = strlen(str);
    for (int i = 0; i < len / 2; i++) {
        char temp = str[i];
        str[i] = str[len - 1 - i];
        str[len - 1 - i] = temp;
    }
    puts(str);

    return 0;
}

现在你可以输入一个字符串,然后代码会将其倒序输出。希望对你有帮助!

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-26 11:37:38 | 显示全部楼层
#include <stdio.h>
#include <string.h>
int main()
{
    char a[101],temp;
    int i;
    fgets(a,101,stdin);
    int n=strlen(a);
    for(i=0;i<n/2;i++)
    {
        temp=a[i];
        a[i]=a[n-1-i];
        a[n-1-i]=temp;
    }
    puts(a);
    return 0;
}
为什么运行崩溃
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-26 11:37:54 | 显示全部楼层
mamaaini 发表于 2023-11-26 11:37
#include
#include
int main()
{
    char a,te ...

你的代码中有一些问题。我来给你解释一下并提供正确的代码。

首先,你定义的字符变量 `a` 应该是一个字符串数组,而不是单个字符。所以要修改为 `char a[101];`,这样就可以存储长度为100的字符串了。同时,在使用 `fgets` 函数时,应该指定读取的字符数为 101,以防止溢出。

然后,你在循环中的交换操作不正确。正确的交换操作应该是通过使用临时变量来交换两个字符的值。
具体来说,你需要交换 `a[i]` 和 `a[n-i-1]` 位置上的字符。

最后,你在打印字符串时,可以使用 `puts` 函数来输出字符串,并自动添加换行符。需要注意的是,`fgets` 函数会将输入的换行符也读入到字符串中,所以在输出时可能会出现多余的换行符。可以使用 `strtok` 函数去除换行符。

下面是修改后的代码:
#include <stdio.h>#include <string.h>int main() {    char a[101], temp;    int i;    fgets(a, 101, stdin);    int n = strlen(a);        // 去除换行符    strtok(a, "\n");        for (i = 0; i < n / 2; i++) {        temp = a[i];        a[i] = a[n - i - 1];        a[n - i - 1] = temp;    }        puts(a);        return 0;}
现在你可以输入一个字符串,然后代码会将其颠倒输出。希望对你有帮助!

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-26 11:45:40 | 显示全部楼层
Snipaste_2023-11-26_11-45-21.png

无语了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-26 12:18:58 | 显示全部楼层

就是看不懂这位同学在做什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 07:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表