分别输入两个字符串,可选择字符串相加减,也可选择字符串相加,①选择 两字符串相加:两个字符串首尾相连,合成为一个字符串,②选择字符串相减:将 输入的第一个字符串中含有第二个字符串的部分减去,并输出,若第一个字符串 中无第二个字符串的完整部分,则提示错误,重新输入第二个字符串,并输出结 果。禁止使用#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 生成】
对于这个问题,我们可以按照以下步骤进行解答:
char str1[MAX_LEN];
char str2[MAX_LEN];
printf("请输入第一个字符串:");
scanf("%s", str1);
printf("请输入第二个字符串:");
scanf("%s", str2);
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';
}
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++;
}
}
}
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>
库函数的情况下实现字符串的相加和相减操作。请根据需要作相应的修改。如果有任何问题,请随时提问。
【相关推荐】