鱼C论坛

 找回密码
 立即注册
查看: 1036|回复: 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 编辑
  1. #include <stdio.h>

  2. int main()
  3. {         char str[5][80];
  4.         int i, j, k;
  5.         // 输入5个字符串
  6.         for (i = 0; i < 5; i++)
  7.         {
  8.             printf("请输入第%d个字符串:", i + 1);
  9.             gets(str[i]);
  10.         }
  11.        
  12.         // 保留英文字母并转换为大写字母
  13.         for (i = 0; i < 5; i++)
  14.         {
  15.             k = 0;
  16.             for (j = 0; str[i][j] != '\0'; j++)
  17.             {
  18.                 if ((str[i][j] >= 'a' && str[i][j] <= 'z') ||
  19.                     (str[i][j] >= 'A' && str[i][j] <= 'Z'))
  20.                 {
  21.                     if (str[i][j] >= 'a' && str[i][j] <= 'z')
  22.                     {
  23.                         str[i][k] = str[i][j] - 'a' + 'A';
  24.                     }
  25.                     else
  26.                     {
  27.                         str[i][k] = str[i][j];
  28.                     }
  29.                     k++;
  30.                 }
  31.             }
  32.             str[i][k] = '\0'; // 加上字符串结束符
  33.         }
  34.        
  35.         // 输出5个字符串
  36.         for (i = 0; i < 5; i++)
  37.         {
  38.             printf("第%d个字符串为:%s\n", i + 1, str[i]);
  39.         }

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

使用道具 举报

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

  2. int main()
  3. {         char str[5][80];
  4.         int i, j, k;
  5.         // 输入5个字符串
  6.         for (i = 0; i < 5; i++)
  7.         {
  8.             printf("请输入第%d个字符串:", i + 1);
  9.             gets(str[i]);
  10.         }
  11.        
  12.         // 保留英文字母并转换为大写字母
  13.         for (i = 0; i < 5; i++)
  14.         {
  15.             k = 0;
  16.             for (j = 0; str[i][j] != '\0'; j++)
  17.             {
  18.                 if ((str[i][j] >= 'a' && str[i][j] <= 'z') ||
  19.                     (str[i][j] >= 'A' && str[i][j] <= 'Z'))
  20.                 {
  21.                     if (str[i][j] >= 'a' && str[i][j] <= 'z')
  22.                     {
  23.                         str[i][k] = str[i][j] - 'a' + 'A';
  24.                     }
  25.                     else
  26.                     {
  27.                         str[i][k] = str[i][j];
  28.                     }
  29.                     k++;
  30.                 }
  31.             }
  32.             str[i][k] = '\0'; // 加上字符串结束符
  33.         }
  34.        
  35.         // 输出5个字符串
  36.         for (i = 0; i < 5; i++)
  37.         {
  38.             printf("第%d个字符串为:%s\n", i + 1, str[i]);
  39.         }

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

使用道具 举报

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

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>

  4. void remove_non_alpha(char *str) {
  5.     int i = 0, j = 0;
  6.     while (str[i]) {
  7.         if (isalpha(str[i])) {
  8.             str[j++] = str[i];
  9.         }
  10.         i++;
  11.     }
  12.     str[j] = '\0';
  13. }

  14. void to_upper(char *str) {
  15.     int i = 0;
  16.     while (str[i]) {
  17.         str[i] = toupper(str[i]);
  18.         i++;
  19.     }
  20. }

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

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

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

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

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

  42.     return 0;
  43. }
复制代码


这段代码定义了两个辅助函数 `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 | 显示全部楼层
  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5.         char str[5][80],str1[5][80];
  6.         int i,j,t=0;
  7.         for(i=0;i<5;i++)
  8.         {gets(str[i]);}
  9.           for(i=0;i<5;i++)
  10.               for(j=0;j<80;j++)
  11.             {
  12.                     if('a'<=str[i][j]&&str[i][j]<='z')
  13.                         {
  14.                                 str[i][j]-=32;
  15.                         }
  16.                
  17.             }
  18.         for(i=0;i<5;i++)
  19.         {puts(str[i]);}                    
  20.        
  21. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

了解您的需求,我们可以修改您提供的代码来实现题目要求。以下是修改后的代码:

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

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

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

  11.     // 保留英文字母并删除其他字符
  12.     for (i = 0; i < 5; i++) {
  13.         k = 0;
  14.         for (j = 0; j < strlen(str[i]); j++) {
  15.             if (('a' <= str[i][j] && str[i][j] <= 'z') || ('A' <= str[i][j] && str[i][j] <= 'Z')) {
  16.                 str[i][k++] = str[i][j];
  17.             }
  18.         }
  19.         str[i][k] = '\0';
  20.     }

  21.     // 将小写字母转换为大写字母
  22.     for (i = 0; i < 5; i++) {
  23.         for (j = 0; j < strlen(str[i]); j++) {
  24.             if ('a' <= str[i][j] && str[i][j] <= 'z') {
  25.                 str[i][j] -= 32;
  26.             }
  27.         }
  28.     }

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

  34.     return 0;
  35. }
复制代码


这个代码使用您的原始结构,但添加了一个额外的循环来删除字符串中的非英文字母字符。我们使用变量 `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-5-10 21:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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