c语言pat基础题0904L1086

img

img


我的代码出现问题,本题希望可以得到大家的指导,谢谢你的帮助!

根据题目提示,直接编写代码即可。

代码如下:



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

// 比较两个字符的ASCII码大小,返回较大的字符 
char max(char ch1,char ch2){
    
    if(ch1>ch2){
        return ch1;
    }else{
        return ch2;
    }
    
}

// 将题目的伪代码改为C语言代码 
void getStr(char * oriStr,char * result){
    
    char * a = oriStr;
    
    int j=0;
    for(int i=1;i<strlen(a);i++){
        
        if(a[i]%2==a[i-1]%2){
            result[j]=max(a[i],a[i-1]);
            j++;
        }        
    }
    result[j]='\0';
//    printf("result=%s\n",result);
    
}


int main(void){
    
    char str1[10001];  // 存储输入的第一个字符串 
    char str2[10001];  // 存储输入的第二个字符串 
    char s1[10001];  // 存储第一个字符串的提取结果 
    char s2[10001];  //存储第二个字符串的提取结果 
    
    // 从输入获取两个字符串 
    gets(str1);  
    gets(str2);
//    printf("str1=%s\nstr2=%s\n",str1,str2);
    
    // 从两个输入的字符串中=提取目标字符串 
    getStr(str1,s1);
    getStr(str2,s2);
    
    // 如果提取的结果一样,则输出其中一个字符串,否则两个字符串都输出 
    if(strcmp(s1,s2)==0){
        printf("%s",s1);
    }else{
        printf("%s\n%s",s1,s2);
    }        
    
    return 0;
    
} 


img

【以下回答由 GPT 生成】

为了判断两个字符串是否能通过模拟斯德哥尔摩火车算法得到相同的输出,我们可以按照以下步骤进行:

  1. 首先,我们需要实现伪代码中的算法。我们可以编写一个函数simulateStigAlgorithm()来模拟算法的执行过程。函数需要接受两个参数,分别是字符串a和字符串b

  2. 在算法模拟过程中,我们需要定义一个变量S来存储模拟结果。初始时,将S设置为字符串a

  3. 使用一个循环遍历字符串a,判断每个字符和前一个字符的奇偶性是否相同,如果相同,则将较大的字符连接到S上。可以使用strcat()函数来实现连接字符串的操作。

  4. 循环结束后,S即为通过算法得到的结果。我们可以将S与字符串b进行比较,如果相等,则说明两个字符串能通过模拟算法得到相同的输出;如果不相等,则说明不能得到相同的输出。

以下是使用C语言实现该算法的示例代码:

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

void simulateStigAlgorithm(char* a, char* b) {
    char S[20];
    strcpy(S, a);
    int len = strlen(a);    
    for (int i = 1; i < len; i++) {
        if (a[i] % 2 == a[i-1] % 2) {
            char temp[2] = "";
            temp[0] = a[i] > a[i-1] ? a[i] : a[i-1];
            strcat(S, temp);
        }
    }

    if (strcmp(S, b) == 0) {
        printf("字符串a和字符串b能通过模拟算法得到相同的输出\n");
    } else {
        printf("字符串a和字符串b不能通过模拟算法得到相同的输出\n");
    }
}

int main() {
    char a[11], b[11];
    printf("请输入字符串a:");
    scanf("%s", a);
    printf("请输入字符串b:");
    scanf("%s", b);

    simulateStigAlgorithm(a, b);

    return 0;
}

在这个示例代码中,我们定义了simulateStigAlgorithm()函数来模拟算法的执行过程。使用strcmp()函数来比较S与字符串b是否相等。根据比较结果输出相应的提示信息。

你可以将需要判断的字符串输入程序中,程序会输出判断结果。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

供参考:

#include <stdio.h>
#include <string.h>
#define max(a,b)  ((a) > (b) ? (a) : (b))
int main()
{
    int  i, k;
    char s1[10000] = { 0 }, s2[10000] = {0}, a1[10000], a2[10000];
    scanf("%s %s", a1, a2);
    for (i = 1, k = 0; a1[i]; i++)
        if (a1[i] % 2 == a1[i - 1] % 2)
            s1[k++] = max(a1[i], a1[i - 1]);
    s1[k] = '\0';
    for (i = 1, k = 0; a2[i]; i++)
        if (a2[i] % 2 == a2[i - 1] % 2)
            s2[k++] = max(a2[i], a2[i - 1]);
    s2[k] = '\0';
    if (strcmp(s1, s2) == 0)
        printf("%s", s1);
    else
        printf("%s\n%s", s1, s2);
    return 0;
}