鱼C论坛

 找回密码
 立即注册
查看: 1199|回复: 7

[已解决]求大佬帮忙看看这道题

[复制链接]
发表于 2023-4-23 14:57:35 | 显示全部楼层 |阅读模式
5鱼币
定义 char str[5][80],编程实现以下功能:
1)输入 5 个字符串。
2)    将字符串中的英文字母保留,其他字符全部删除。(以一维数组的角度去处理二维数组)
[思路:先分别写出 str[0],str[1]数组保留字母的代码,然后观察和综合以上两个代码,写出每一个一维数组保留字母的代码]。
3)    对于剩下的英文字母中的小写字母全部转换为大写字母。
4)    输出这五个字符串。
最佳答案
2023-4-23 14:57:36
本帖最后由 a905448839 于 2023-4-23 15:45 编辑
#include <stdio.h>

int main() 
{         char str[5][80]; 
        int i, j, k;
        // 输入5个字符串
        for (i = 0; i < 5; i++)
        {
            printf("请输入第%d个字符串:", i + 1);
            gets(str[i]);
        }
        
        // 保留英文字母并转换为大写字母
        for (i = 0; i < 5; i++)
        {
            k = 0;
            for (j = 0; str[i][j] != '\0'; j++)
            {
                if ((str[i][j] >= 'a' && str[i][j] <= 'z') ||
                    (str[i][j] >= 'A' && str[i][j] <= 'Z'))
                {
                    if (str[i][j] >= 'a' && str[i][j] <= 'z')
                    {
                        str[i][k] = str[i][j] - 'a' + 'A';
                    }
                    else
                    {
                        str[i][k] = str[i][j];
                    }
                    k++;
                }
            }
            str[i][k] = '\0'; // 加上字符串结束符
        }
        
        // 输出5个字符串
        for (i = 0; i < 5; i++)
        {
            printf("第%d个字符串为:%s\n", i + 1, str[i]);
        }

return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-23 14:57:36 | 显示全部楼层    本楼为最佳答案   
本帖最后由 a905448839 于 2023-4-23 15:45 编辑
#include <stdio.h>

int main() 
{         char str[5][80]; 
        int i, j, k;
        // 输入5个字符串
        for (i = 0; i < 5; i++)
        {
            printf("请输入第%d个字符串:", i + 1);
            gets(str[i]);
        }
        
        // 保留英文字母并转换为大写字母
        for (i = 0; i < 5; i++)
        {
            k = 0;
            for (j = 0; str[i][j] != '\0'; j++)
            {
                if ((str[i][j] >= 'a' && str[i][j] <= 'z') ||
                    (str[i][j] >= 'A' && str[i][j] <= 'Z'))
                {
                    if (str[i][j] >= 'a' && str[i][j] <= 'z')
                    {
                        str[i][k] = str[i][j] - 'a' + 'A';
                    }
                    else
                    {
                        str[i][k] = str[i][j];
                    }
                    k++;
                }
            }
            str[i][k] = '\0'; // 加上字符串结束符
        }
        
        // 输出5个字符串
        for (i = 0; i < 5; i++)
        {
            printf("第%d个字符串为:%s\n", i + 1, str[i]);
        }

return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-23 15:01:20 | 显示全部楼层
#include <stdio.h>
#include <string.h>
#include <ctype.h>

void remove_non_alpha(char *str) {
    int i = 0, j = 0;
    while (str[i]) {
        if (isalpha(str[i])) {
            str[j++] = str[i];
        }
        i++;
    }
    str[j] = '\0';
}

void to_upper(char *str) {
    int i = 0;
    while (str[i]) {
        str[i] = toupper(str[i]);
        i++;
    }
}

int main() {
    char str[5][80];

    // 1. 输入5个字符串
    for (int i = 0; i < 5; i++) {
        printf("请输入字符串 %d: ", i + 1);
        fgets(str[i], sizeof(str[i]), stdin);
        str[i][strcspn(str[i], "\n")] = 0; // 去掉末尾的换行符
    }

    // 2. 保留英文字母并删除其他字符
    for (int i = 0; i < 5; i++) {
        remove_non_alpha(str[i]);
    }

    // 3. 将小写字母转换为大写字母
    for (int i = 0; i < 5; i++) {
        to_upper(str[i]);
    }

    // 4. 输出处理后的字符串
    printf("\n处理后的字符串:\n");
    for (int i = 0; i < 5; i++) {
        printf("%s\n", str[i]);
    }

    return 0;
}

这段代码定义了两个辅助函数 `remove_non_alpha` 和 `to_upper`,分别实现题目中要求的功能。`remove_non_alpha` 函数删除字符串中的非英文字母字符,`to_upper` 函数将字符串中的小写字母转换为大写字母。`main` 函数中依次实现了题目要求的输入、处理和输出过程。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-4-23 15:19:54 | 显示全部楼层
isdkz 发表于 2023-4-23 15:01
这段代码定义了两个辅助函数 `remove_non_alpha` 和 `to_upper`,分别实现题目中要求的功能。`remove ...

不好意思啊,你这个有好多我没学过,看不太懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-4-23 15:38:33 | 显示全部楼层
isdkz 发表于 2023-4-23 15:01
这段代码定义了两个辅助函数 `remove_non_alpha` 和 `to_upper`,分别实现题目中要求的功能。`remove ...

#include<stdio.h>
#include<string.h>
int main()
{
        char str[5][80];
        int i,j,t=0;
        for(i=0;i<5;i++)
        {gets(str);}
          for(i=0;i<5;i++)
              for(j=0;j<80;j++)
            {
                    if('a'<=str[j]&&str[j]<='z')
                        {
                                str[j]-=32;
                        }
               
            }
        for(i=0;i<5;i++)
        {puts(str);}                    
       
}


我用这个方法搞,就是不知道怎么删除空格和数字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-4-23 15:39:16 | 显示全部楼层
#include<stdio.h>
#include<string.h>
int main()
{
        char str[5][80],str1[5][80];
        int i,j,t=0;
        for(i=0;i<5;i++)
        {gets(str[i]);}
          for(i=0;i<5;i++)
              for(j=0;j<80;j++)
            {
                    if('a'<=str[i][j]&&str[i][j]<='z')
                        {
                                str[i][j]-=32;
                        } 
                
            } 
        for(i=0;i<5;i++)
        {puts(str[i]);}                    
        
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-23 15:50:20 | 显示全部楼层

了解您的需求,我们可以修改您提供的代码来实现题目要求。以下是修改后的代码:
#include <stdio.h>
#include <string.h>

int main() {
    char str[5][80];
    int i, j, k;

    // 输入5个字符串
    for (i = 0; i < 5; i++) {
        printf("请输入字符串 %d: ", i + 1);
        gets(str[i]);
    }

    // 保留英文字母并删除其他字符
    for (i = 0; i < 5; i++) {
        k = 0;
        for (j = 0; j < strlen(str[i]); j++) {
            if (('a' <= str[i][j] && str[i][j] <= 'z') || ('A' <= str[i][j] && str[i][j] <= 'Z')) {
                str[i][k++] = str[i][j];
            }
        }
        str[i][k] = '\0';
    }

    // 将小写字母转换为大写字母
    for (i = 0; i < 5; i++) {
        for (j = 0; j < strlen(str[i]); j++) {
            if ('a' <= str[i][j] && str[i][j] <= 'z') {
                str[i][j] -= 32;
            }
        }
    }

    // 输出处理后的字符串
    printf("\n处理后的字符串:\n");
    for (i = 0; i < 5; i++) {
        puts(str[i]);
    }

    return 0;
}

这个代码使用您的原始结构,但添加了一个额外的循环来删除字符串中的非英文字母字符。我们使用变量 `k` 来记录已经处理过的字符的位置。在字符串中遍历每个字符,如果是英文字母,将其复制到 `k` 位置,然后增加 `k` 的值。处理完毕后,我们将字符串末尾的空字符 `\0` 设置在 `k` 位置。这样就实现了保留英文字母并删除其他字符的功能。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-4-23 15:53:17 | 显示全部楼层
isdkz 发表于 2023-4-23 15:50
了解您的需求,我们可以修改您提供的代码来实现题目要求。以下是修改后的代码:

我已经明白了,谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-16 14:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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