关于#c语言#的问题

分别输入两个字符串,可选择字符串相加减,也可选择字符串相加,①选择 两字符串相加:两个字符串首尾相连,合成为一个字符串,②选择字符串相减:将 输入的第一个字符串中含有第二个字符串的部分减去,并输出,若第一个字符串 中无第二个字符串的完整部分,则提示错误,重新输入第二个字符串,并输出结 果。禁止使用#include<string.h>

#include <stdio.h>

// 函数声明
void concatStrings(char str1[], char str2[]);
void subtractStrings(char str1[], char str2[]);

int main() {
    char str1[100];
    char str2[100];
    int choice;

    printf("请输入第一个字符串:");
    scanf("%s", str1);
    printf("请输入第二个字符串:");
    scanf("%s", str2);

    printf("请选择操作:\n");
    printf("1. 两字符串相加\n");
    printf("2. 字符串相减\n");
    scanf("%d", &choice);

    switch (choice) {
        case 1:
            concatStrings(str1, str2);
            break;
        case 2:
            subtractStrings(str1, str2);
            break;
        default:
            printf("无效的选择\n");
            break;
    }

    return 0;
}

// 两字符串相加
void concatStrings(char str1[], char str2[]) {
    int i, j;

    // 定位str1的结束位置
    for (i = 0; str1[i] != '\0'; i++);

    // 拼接str2到str1的末尾
    for (j = 0; str2[j] != '\0'; j++) {
        str1[i++] = str2[j];
    }

    // 添加字符串结束标志
    str1[i] = '\0';

    // 输出合并后的字符串
    printf("合并后的字符串:%s\n", str1);
}

// 字符串相减
void subtractStrings(char str1[], char str2[]) {
    int i, j, k;
    int found;

    // 遍历str1中的每个字符
    for (i = 0; str1[i] != '\0'; i++) {
        found = 1;

        // 检查str1中的子串是否与str2匹配
        for (j = 0, k = i; str2[j] != '\0'; j++, k++) {
            if (str1[k] != str2[j]) {
                found = 0;
                break;
            }
        }

        // 如果匹配,从str1中删除匹配的部分
        if (found) {
            for (j = i, k = i + j; str1[k] != '\0'; j++, k++) {
                str1[j] = str1[k];
            }
            str1[j] = '\0';
            break;
        }
    }

    // 根据匹配结果输出相减后的字符串或错误信息
    if (found) {
        printf("相减后的字符串:%s\n", str1);
    } else {
        printf("第一个字符串中无第二个字符串的完整部分\n");
    }
}


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

【以下回答由 GPT 生成】

问题解答

对于这个问题,我们可以按照以下步骤进行解答:

  1. 首先,我们需要定义两个字符数组来存储输入的两个字符串。
char str1[MAX_LEN];
char str2[MAX_LEN];
  1. 然后,我们需要获取用户输入的两个字符串,并存储到相应的字符数组中。
printf("请输入第一个字符串:");
scanf("%s", str1);

printf("请输入第二个字符串:");
scanf("%s", str2);
  1. 接下来,我们需要实现字符串相加的操作。我们可以使用一个循环来遍历第二个字符串,并将其依次添加到第一个字符串的末尾。
void concatenateStrings(char* str1, char* str2) {
    int i = 0;
    int j = 0;

    // 寻找第一个字符串的末尾
    while (str1[i] != '\0') {
        i++;
    }

    // 将第二个字符串添加到第一个字符串的末尾
    while (str2[j] != '\0') {
        str1[i] = str2[j];
        i++;
        j++;
    }

    // 添加字符串结束符
    str1[i] = '\0';
}
  1. 最后,我们实现字符串相减的操作。我们可以使用一个循环来逐个比较第一个字符串和第二个字符串的字符,如果相同则删除第一个字符串中对应的字符。
void subtractStrings(char* str1, char* str2) {
    int i, j, k;
    int found;

    for (i = 0; str1[i] != '\0';) {
        j = 0;
        found = 0;

        // 检查当前位置是否与第二个字符串相同
        while (str2[j] != '\0' && str1[i] == str2[j]) {
            i++;
            j++;
            found = 1;
        }

        // 如果找到了相同的字符串,则删除第一个字符串中相同的部分
        if (found == 1) {
            for (k = i - j; str1[i] != '\0'; k++, i++) {
                str1[k] = str1[i];
            }

            str1[k] = '\0';
        } else {
            i++;
        }
    }
}
  1. 最后,在主函数中,我们只需要根据用户选择的操作选项来调用相应的函数。
int main() {
    int choice;

    printf("请选择操作选项:\n");
    printf("1. 选择字符串相加\n");
    printf("2. 选择字符串相减\n");
    printf("请选择: ");
    scanf("%d", &choice);

    if (choice == 1) {
        concatenateStrings(str1, str2);
        printf("合并后的字符串为: %s\n", str1);
    } else if (choice == 2) {
        // 首先检查第一个字符串是否包含第二个字符串的部分
        int match = checkSubstring(str1, str2);
        if (match == 1) {
            subtractStrings(str1, str2);
            printf("相减后的字符串为: %s\n", str1);
        } else {
            printf("输入错误,第一个字符串中不包含完整的第二个字符串部分,请重新输入第二个字符串。\n");
        }
    } else {
        printf("输入无效,请重新选择操作选项。\n");
    }

    return 0;
}

以上是优化后的代码,可以在不使用<string.h>库函数的情况下实现字符串的相加和相减操作。请根据需要作相应的修改。如果有任何问题,请随时提问。



【相关推荐】



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