乔治爱啃脚趾 发表于 2023-4-23 14:57:35

求大佬帮忙看看这道题

定义 char str,编程实现以下功能:
1)输入 5 个字符串。
2)    将字符串中的英文字母保留,其他字符全部删除。(以一维数组的角度去处理二维数组)
[思路:先分别写出 str,str数组保留字母的代码,然后观察和综合以上两个代码,写出每一个一维数组保留字母的代码]。
3)    对于剩下的英文字母中的小写字母全部转换为大写字母。
4)    输出这五个字符串。

a905448839 发表于 2023-4-23 14:57:36

本帖最后由 a905448839 于 2023-4-23 15:45 编辑

#include <stdio.h>

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

return 0;
}

isdkz 发表于 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) {
      if (isalpha(str)) {
            str = str;
      }
      i++;
    }
    str = '\0';
}

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

int main() {
    char str;

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

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

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

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

    return 0;
}


这段代码定义了两个辅助函数 `remove_non_alpha` 和 `to_upper`,分别实现题目中要求的功能。`remove_non_alpha` 函数删除字符串中的非英文字母字符,`to_upper` 函数将字符串中的小写字母转换为大写字母。`main` 函数中依次实现了题目要求的输入、处理和输出过程。

乔治爱啃脚趾 发表于 2023-4-23 15:19:54

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

不好意思啊,你这个有好多我没学过,看不太懂

乔治爱啃脚趾 发表于 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;
        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&&str<='z')
                        {
                                str-=32;
                        }
               
            }
        for(i=0;i<5;i++)
        {puts(str);}                  
       
}


我用这个方法搞,就是不知道怎么删除空格和数字

乔治爱啃脚趾 发表于 2023-4-23 15:39:16

乔治爱啃脚趾 发表于 2023-4-23 15:38
#include
#include
int main()


#include<stdio.h>
#include<string.h>
int main()
{
        char str,str1;
        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&&str<='z')
                        {
                                str-=32;
                        }
               
            }
        for(i=0;i<5;i++)
        {puts(str);}                  
       
}

isdkz 发表于 2023-4-23 15:50:20

乔治爱啃脚趾 发表于 2023-4-23 15:38
#include
#include
int main()


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

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

int main() {
    char str;
    int i, j, k;

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

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

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

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

    return 0;
}


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

乔治爱啃脚趾 发表于 2023-4-23 15:53:17

isdkz 发表于 2023-4-23 15:50
了解您的需求,我们可以修改您提供的代码来实现题目要求。以下是修改后的代码:




我已经明白了,谢谢你{:7_112:}
页: [1]
查看完整版本: 求大佬帮忙看看这道题