鱼C论坛

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

[已解决]c语习题

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

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

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

x
题目:对存储在string数组内的所有以字符'a'开始并以字符'e'结尾的单词做
      加密处理。

加密规则:若单词长度为偶数个字符,则将组成单词的所有字母循环左移一次;否则
          循环右移一次。

例如:单词able经循环左移一次后变为blea;单词abide经循环右移一次后变为eabid。
数组原数据:she is able to abide her.
加密后数据:she is blea to eabid her.

在  /**********Program**********/
   



    /**********  End  **********/中填空
注意:请勿改动程序中的其他部分。

#include <stdio.h>
#include <ctype.h>
void wordchange(char str[])
{  
    int i,j,k,m;  
    char c;
    for(i=0;str[i];i++)
    {
        for(j=i,k=i;isalpha(str[k]);k++);  //查找
        /**********Program**********/





        /**********  End  **********/
        i=k;                                 
    }
}

int main()
{
    char string[80]="she is able to abide her.";
    puts(string);
    wordchange(string);
    puts(string);
    return 0;
}
最佳答案
2023-7-16 16:11:35
这是一个C语言的问题,需要在给定的程序中填空,实现特定的加密规则:对所有以字符'a'开始并以字符'e'结尾的单词,如果单词长度为偶数个字符,则将组成单词的所有字母循环左移一次;否则循环右移一次。

你可以在 /**********Program**********/  和  /**********  End  **********/  之间加入以下代码:
  1. if(str[j]=='a' && str[k-1]=='e')
  2. {
  3.     m=k-j;
  4.     if(m%2==0)
  5.     {
  6.         c=str[j];
  7.         for(i=j;i<k-1;i++)
  8.             str[ i]=str[i+1];
  9.         str[k-1]=c;
  10.     }
  11.     else
  12.     {
  13.         c=str[k-1];
  14.         for(i=k-1;i>j;i--)
  15.             str[ i]=str[i-1];
  16.         str[j]=c;
  17.     }
  18. }
复制代码

现在让我们详细解释一下这段代码的运行原理:

·  if(str[j]=='a' && str[k-1]=='e')  首先我们检查单词是否以'a'开始并以'e'结尾。如果是,我们继续执行加密操作。

·  m=k-j;  计算单词的长度。

·  if(m%2==0)  判断单词长度是否为偶数。

· 如果单词长度是偶数,我们执行循环左移。我们保存第一个字符,然后将剩下的字符向左移动一位,最后把保存的第一个字符放到最后一位。

· 如果单词长度是奇数,我们执行循环右移。我们保存最后一个字符,然后将剩下的字符向右移动一位,最后把保存的最后一个字符放到第一位。

因此,这段代码能够实现题目中的加密规则,并且只会对符合特定条件(以'a'开始并以'e'结尾)的单词进行操作。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-16 16:11:22 | 显示全部楼层
以下是填空部分的完整代码:
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. void wordchange(char str[]) {
  4.     int i, j, k, m;
  5.     char c;
  6.    
  7.     for (i = 0; str[i]; i++) {
  8.         for (j = i, k = i; isalpha(str[k]); k++);
  9.         
  10.         if (str[j] == 'a' && str[k - 1] == 'e') {
  11.             m = k - j;
  12.             
  13.             if (m % 2 == 0) {
  14.                 c = str[j];
  15.                
  16.                 for (i = j; i < k - 1; i++) {
  17.                     str[i] = str[i + 1];
  18.                 }
  19.                
  20.                 str[k - 1] = c;
  21.             } else {
  22.                 c = str[k - 1];
  23.                
  24.                 for (i = k - 1; i > j; i--) {
  25.                     str[i] = str[i - 1];
  26.                 }
  27.                
  28.                 str[j] = c;
  29.             }
  30.         }
  31.         
  32.         i = k;
  33.     }
  34. }
  35. int main() {
  36.     char string[80] = "she is able to abide her.";
  37.     puts(string);
  38.     wordchange(string);
  39.     puts(string);
  40.     return 0;
  41. }
复制代码

wordchange 函数中,我添加了循环来查找以字符 'a' 开始并以字符 'e' 结尾的单词。然后,根据单词的长度是偶数还是奇数,进行循环左移或循环右移操作。

这个程序会对存储在字符串数组内的符合条件的单词进行加密处理。希望能够帮到你!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-16 16:11:35 | 显示全部楼层    本楼为最佳答案   
这是一个C语言的问题,需要在给定的程序中填空,实现特定的加密规则:对所有以字符'a'开始并以字符'e'结尾的单词,如果单词长度为偶数个字符,则将组成单词的所有字母循环左移一次;否则循环右移一次。

你可以在 /**********Program**********/  和  /**********  End  **********/  之间加入以下代码:
  1. if(str[j]=='a' && str[k-1]=='e')
  2. {
  3.     m=k-j;
  4.     if(m%2==0)
  5.     {
  6.         c=str[j];
  7.         for(i=j;i<k-1;i++)
  8.             str[ i]=str[i+1];
  9.         str[k-1]=c;
  10.     }
  11.     else
  12.     {
  13.         c=str[k-1];
  14.         for(i=k-1;i>j;i--)
  15.             str[ i]=str[i-1];
  16.         str[j]=c;
  17.     }
  18. }
复制代码

现在让我们详细解释一下这段代码的运行原理:

·  if(str[j]=='a' && str[k-1]=='e')  首先我们检查单词是否以'a'开始并以'e'结尾。如果是,我们继续执行加密操作。

·  m=k-j;  计算单词的长度。

·  if(m%2==0)  判断单词长度是否为偶数。

· 如果单词长度是偶数,我们执行循环左移。我们保存第一个字符,然后将剩下的字符向左移动一位,最后把保存的第一个字符放到最后一位。

· 如果单词长度是奇数,我们执行循环右移。我们保存最后一个字符,然后将剩下的字符向右移动一位,最后把保存的最后一个字符放到第一位。

因此,这段代码能够实现题目中的加密规则,并且只会对符合特定条件(以'a'开始并以'e'结尾)的单词进行操作。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-16 16:35:23 | 显示全部楼层
陶远航 发表于 2023-7-16 16:11
以下是填空部分的完整代码:

脚本可以发我吗,我想研究研究
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-16 16:38:05 | 显示全部楼层
学习编程中的Ben 发表于 2023-7-16 16:35
脚本可以发我吗,我想研究研究

《研究》
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-16 16:40:06 | 显示全部楼层

我不用行吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 00:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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