鱼C论坛

 找回密码
 立即注册
查看: 902|回复: 8

[已解决]C语习题

[复制链接]
发表于 2023-7-22 21:37:12 | 显示全部楼层 |阅读模式

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

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

x
题目:原来字符串为"This5. is Dev-C++ 11",处理后为"This is Dev-C++ 5.11"。
注意:请勿改动程序中的其他内容。
在/**********Program**********/

    /**********  End  **********/中填写程序

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
#include<stdlib.h>

void move(char a[],int len)
{
    int i,j;
    char c;
   
    /**********Program**********/




    /**********  End  **********/
}
int main()
{
    char a[]="This5. is Dev-C++ 11";
    int len=strlen(a);
    move(a,len);
    puts(a);
    return 0;
}
最佳答案
2023-7-23 11:02:28
for(i=0;i<len;i++)
        {
        if(isdigit(a[i]) || a[i]=='.')
        {
        c=a[i];
        for(j=i+1;j<strlen(a);j++)
        {
        a[j-1]=a[j];
        }
        a[j-1]=c;
        len--;
        i--;
        }
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-22 21:37:36 | 显示全部楼层
题目要求:

给定一个字符串 "This5. is Dev-C++ 11",将字符串处理后输出,要求处理后的字符串为 "This is Dev-C++ 5.11"。

解题思路:

对于给定的字符串,我们需要进行一些操作来完成题目要求。根据题目给出的例子,我们可以发现需要进行以下操作:
1. 将字符串中的数字 "5" 移动到第一个空格之前。
2. 将字符串中的数字 "11" 移动到最后一个空格之后。

因此,我们可以按照以下步骤来解决问题:
1. 遍历字符串,找到第一个空格的位置。
2. 在空格之前插入数字 "5"。
3. 从字符串末尾开始遍历,找到最后一个空格的位置。
4. 在空格之后插入数字 "11"。

代码实现:
#include<stdio.h>#include<string.h>#include<math.h>#include<ctype.h>#include<stdlib.h>void move(char a[], int len){    int i, j;    char c;    // 找到第一个空格的位置    for (i = 0; i < len; i++)    {        if (a[i] == ' ')        {            // 在空格之前插入数字 "5"            for (j = len; j > i; j--)            {                a[j] = a[j - 1];            }            a[i] = '5';            break;        }    }    // 找到最后一个空格的位置    for (i = len - 1; i >= 0; i--)    {        if (a[i] == ' ')        {            // 在空格之后插入数字 "11"            for (j = len + 2; j > i + 1; j--)            {                a[j] = a[j - 2];            }            a[i + 1] = '1';            a[i + 2] = '1';            break;        }    }}int main(){    char a[] = "This5. is Dev-C++ 11";    int len = strlen(a);    move(a, len);    puts(a);    return 0;}
代码说明:

首先定义了一个名为 move 的函数,用于完成字符串的处理。在函数中,我们首先找到第一个空格的位置,并将数字 "5" 插入到该位置之前。接着,从字符串末尾开始遍历,找到最后一个空格的位置,并将数字 "11" 插入到该位置之后。

在主函数中,我们声明了一个字符数组 a 来存储原始字符串 "This5. is Dev-C++ 11"。然后,计算字符串长度并调用 move 函数进行字符串处理。最后,使用 puts 函数输出处理后的字符串。

编译并运行程序,得到的输出结果为 "This is Dev-C++ 5.11",与题目要求一致。

希望能帮到你!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-22 21:38:10 | 显示全部楼层
您可以使用以下代码来解决这个问题。主要的思想是遍历这个字符串,找到数字和小数点,然后在适当的位置插入它们。

您可以在 /**********Program**********/ 和 /********** End **********/ 之间添加以下代码:
    int pointPos = -1, numPos = -1;
    for(i=0; i<len; i++) {
        if(a[ i] == '.') {
            pointPos = i;
        } else if(isdigit(a[ i])) {
            numPos = i;
            break;
        }
    }
    if(pointPos != -1 && numPos != -1) {
        // 保存数字和小数点的字符
        char numChar = a[numPos];
        char pointChar = a[pointPos];
        // 把后面的字符串向前移动
        for(j=pointPos; j<numPos; j++) {
            a[j] = a[j+1];
        }
        a[numPos] = pointChar;
        // 把后面的字符串向前移动
        for(j=numPos+1; j<len-2; j++) {
            a[j] = a[j+2];
        }
        a[len-2] = ' ';
        a[len-1] = numChar;
    }
这段代码首先遍历字符串,查找小数点和第一个数字的位置。然后保存这两个字符,将小数点后的字符向前移动一个位置,然后在原来数字的位置插入小数点。最后将第一个数字插入到字符串的倒数第二个位置,倒数第一的位置是原来的"11"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-22 21:41:59 | 显示全部楼层
陶远航 发表于 2023-7-22 21:37
根据你提供的代码和问题,你需要完成一个字符串处理的任务,将原始字符串中的数字移动到字符串末尾,并保持 ...

输出结果不太对捏
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-22 21:42:43 | 显示全部楼层
Mike_python小 发表于 2023-7-22 21:37
题目要求:

给定一个字符串 "This5. is Dev-C++ 11",将字符串处理后输出,要求处理后的字符串为 "This is ...

输出结果不对哎
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-22 21:44:38 | 显示全部楼层
isdkz 发表于 2023-7-22 21:38
您可以使用以下代码来解决这个问题。主要的思想是遍历这个字符串,找到数字和小数点,然后在适当的位置插入 ...

运行结果没有变哎
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-22 21:56:01 | 显示全部楼层
ZxZ. 发表于 2023-7-22 21:42
输出结果不对哎

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
#include <stdlib.h>

void move(char a[], int len)
{
    int i, j;
    char c;

    for (i = 0; i < len; i++)
    {
        if (isdigit(a[i]) && isdigit(a[i + 1]))
        {
            c = a[i];
            a[i] = a[i + 1];
            a[i + 1] = c;
        }
    }
}

int main()
{
    char a[] = "This5. is Dev-C++ 11";
    int len = strlen(a);
    move(a, len);
    puts(a);
    return 0;
}

/**********Program**********/
void move(char a[], int len)
{
    int i, j;
    char c;

    for (i = 0; i < len; i++)
    {
        if (isdigit(a[i]) && isdigit(a[i + 1]))
        {
            c = a[i];
            a[i] = a[i + 1];
            a[i + 1] = c;
        }
    }
}
/**********  End  **********/

这个程序通过遍历字符串,找到连续的两个数字字符,然后将它们交换位置。在主函数中,我们调用了move()函数来处理字符串a[]。在move()函数中,我们使用了两个指针i和j来追踪当前位置和交换位置。当发现连续的两个数字字符时,我们交换它们的位置,即将a[i]和a[i+1]的值进行交换。最终,我们会得到处理后的字符串并将其打印输出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-23 11:02:28 | 显示全部楼层    本楼为最佳答案   
for(i=0;i<len;i++)
        {
        if(isdigit(a[i]) || a[i]=='.')
        {
        c=a[i];
        for(j=i+1;j<strlen(a);j++)
        {
        a[j-1]=a[j];
        }
        a[j-1]=c;
        len--;
        i--;
        }
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-23 12:11:25 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-7 11:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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