无法更换线路。结果 - 随机符号行

问题描述 投票:0回答:1

我在大学有一项任务,要求我输入 2 行,然后替换它们。

如果您告诉我我在哪里犯了错误,我将非常感激。抱歉,英语不好。 _.

PS:这项任务还要求我编写具有几个函数的程序,而不是一个。因此,在我将代码拆分为函数之前,它一直在按需要工作。

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

int entstr1(char *, int long1);
int entstr2(char *, int long2);
int plustr(char*, char*, char*, int, int, int);
int i;
int longall, long1, long2;

int main(void) {
    char str1[7], str2[7], rstr[14];;

    

    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);

    entstr1(str1, long1);
    entstr2(str2, long2);

    printf("%s", str1);
    printf("%s", str2);

    longall = long1 + long2;
    printf("\n%d", longall); // 

    plustr(str1, str2, rstr, longall, long1, long2);
    printf("\n\nResult line: %s", rstr);

    return 0;

}

int entstr1(char *str1, int long1) {
    
    printf("Enter 1 line: ");
    fgets(str1, sizeof str1, stdin);
    fflush(stdin);
    long1 = strlen(str1);
    printf("\nLength of 1 line: %d\n", long1); //

    return 1;
}

int entstr2(char* str2, int long2) {

    printf("Enter 1 line: ");
    fgets(str2, sizeof str2, stdin);
    fflush(stdin);
    long2 = strlen(str2);
    printf("\nLength of 2 line: %d\n", long2); //

    return 1;
}

int plustr(char* str1, char* str2, char* rstr, int longall, int long1, int long2) {

    for (i = longall-1, long1; i > long2; i--, long1--) {
        rstr[i] = str1[long1];
    }
    for (i = long2; i != 0; i--) {
        rstr[i] = str2[i];
    }
    return 1;
}

我添加了一些测试命令来查看“longall”是否具有不良值,确实如此! IDK 为什么它变成 0,但是 entstr1 和 entstr2 中的命令显示 long1 和 long2 具有正确的值,但是当它再次进入 main 函数时,两个变量中的值都变成 0)':

c string replace
1个回答
0
投票

@Egor 我想知道我的代码是否完全实现了你的想法。你能检查一下它是否正确吗?然后,如果需要的话,我会解释它。但就你而言,你是相当优秀的编码员,每次看到这段代码都不需要任何解释。

这是:

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

#define MAX_LENGTH 7

int entstr1(char *, int *long1);
int entstr2(char *, int *long2);
int plustr(char *, char *, char *, int, int, int);

int main(void) {
    char str1[MAX_LENGTH], str2[MAX_LENGTH], rstr[MAX_LENGTH * 2];
    int longall, long1, long2;

    entstr1(str1, &long1);
    entstr2(str2, &long2);

    printf("%s", str1);
    printf("%s", str2);

    longall = long1 + long2;
    printf("\n%d", longall);

    plustr(str1, str2, rstr, longall, long1, long2);
    printf("\n\nResult line: %s", rstr);

    return 0;
}

int entstr1(char *str1, int *long1) {
    printf("Enter 1 line: ");
    fgets(str1, MAX_LENGTH, stdin);
    fflush(stdin);
    *long1 = strlen(str1) - 1; // Adjust for the newline character
    printf("\nLength of 1 line: %d\n", *long1);

    return 1;
}

int entstr2(char *str2, int *long2) {
    printf("Enter 2 line: ");
    fgets(str2, MAX_LENGTH, stdin);
    fflush(stdin);
    *long2 = strlen(str2) - 1; // Adjust for the newline character
    printf("\nLength of 2 line: %d\n", *long2);

    return 1;
}

int plustr(char *str1, char *str2, char *rstr, int longall, int long1, int long2) {
    for (int i = 0; i < long1; i++) {
        rstr[i] = str1[i];
    }

    for (int i = 0; i < long2; i++) {
        rstr[long1 + i] = str2[i];
    }

    rstr[longall] = '\0'; // Null-terminate the result string

    return 1;
}

这是我的结果:

希望对您有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.