现有两个字符串s1和s2,它们最多都只能包含255个字符。编写程序,将字符串s1中所有出现在字符串s2中的字符删去,然后输出s1 利用c语言 大学内容
时间: 2023-09-19 20:05:52 浏览: 288
函数:字符串s1中删除串s2里包含的所有字符(c语言)
5星 · 资源好评率100%
### 回答1:
以下是利用 C 语言实现删除字符串 s1 中出现在字符串 s2 中的字符的代码:
```c
#include <stdio.h>
#include <string.h>
void remove_chars(char *s1, char *s2) {
int i, j, k;
int len1 = strlen(s1);
int len2 = strlen(s2);
// 遍历字符串 s1,判断每个字符是否在字符串 s2 中出现过
for (i = j = 0; i < len1; ++i) {
for (k = 0; k < len2; ++k) {
if (s1[i] == s2[k]) {
break;
}
}
// 如果字符没有在字符串 s2 中出现过,则保留该字符
if (k == len2) {
s1[j++] = s1[i];
}
}
// 在字符串末尾添加结束符
s1[j] = '\0';
}
int main() {
char s1[256] = "hello world";
char s2[256] = "llo";
remove_chars(s1, s2);
printf("%s\n", s1); // 输出: he wrd
return 0;
}
```
首先定义一个 `remove_chars` 函数,该函数接收两个参数:字符串 s1 和字符串 s2。然后遍历字符串 s1,判断每个字符是否在字符串 s2 中出现过,如果没有出现过,则保留该字符。最后将处理后的字符串 s1 输出。
在 `main` 函数中定义两个字符串 s1 和 s2,并调用 `remove_chars` 函数处理字符串 s1,最后输出处理后的字符串 s1。
需要注意的是,这里假设字符串 s1 和字符串 s2 中最多都只包含 255 个字符,因此在定义字符数组时,需要将长度定义为 256。同时,在遍历字符串时,需要遍历到字符串的结束符 `\0`,因此在保留字符时,需要在字符串末尾添加结束符。
### 回答2:
可以通过循环遍历s1中的每个字符,然后在每次循环中判断该字符是否出现在s2中。如果出现则将其删除,否则继续下一个字符的判断。具体的C语言代码如下:
```c
#include<stdio.h>
#include<string.h>
int main() {
char s1[256]; // 字符串s1,最多有255个字符
char s2[256]; // 字符串s2,最多有255个字符
int i, j;
printf("请输入字符串s1: ");
gets(s1); // 输入字符串s1
printf("请输入字符串s2: ");
gets(s2); // 输入字符串s2
int len1 = strlen(s1); // 获取s1的长度
if (len1 == 0) {
printf("字符串s1为空");
return 0;
}
int len2 = strlen(s2); // 获取s2的长度
if (len2 == 0) {
printf("字符串s2为空");
return 0;
}
for (i = 0; i < len1; i++) {
for (j = 0; j < len2; j++) {
if (s1[i] == s2[j]) { // 判断字符是否出现在s2中
int k;
for (k = i; k < len1; k++) {
s1[k] = s1[k + 1]; // 删除字符
}
len1--; // 字符删除后,s1的长度减1
i--; // 循环变量i回退1,以便重新判断同一位置的字符
break;
}
}
}
printf("删除字符后的s1为:%s", s1);
return 0;
}
```
在这段代码中,我们使用两层循环来判断s1中的每个字符是否出现在s2中,如果出现则将其删除。删除时,我们通过将后面的字符前移一位来实现删除,并且将s1的长度减1。最后输出删除字符后的s1。请注意,这里使用了`gets()`函数来获取输入,但`gets()`函数在C11标准中已经废弃,因此建议使用安全的函数`fgets()`来代替。
### 回答3:
可以使用C语言编写一个函数来解决这个问题。函数可以接受两个字符串作为参数,然后对字符串s1进行修改来删除s2中出现的字符。
首先,我们可以使用一个循环来遍历字符串s2中的每个字符。对于s2中的每个字符,我们可以使用另一个循环来遍历字符串s1中的每个字符。如果s1中的字符与s2中的字符相等,我们可以使用C语言中的字符串操作函数strncpy()将s1中的该字符之后的所有字符向前移动一个位置,并将字符串的长度减1。这样就相当于删除了s1中的该字符。需要注意的是,由于删除一个字符后,字符串的长度会减小,所以我们需要在内层循环之后更新循环的终止条件,以确保能够正确遍历所有字符。
以下是一个示例函数的C代码:
```c
#include <stdio.h>
#include <string.h>
void deleteCharacters(char* s1, char* s2) {
int len1 = strlen(s1);
int len2 = strlen(s2);
for (int i = 0; i < len2; i++) {
for (int j = 0; j < len1; j++) {
if (s1[j] == s2[i]) {
strncpy(s1 + j, s1 + j + 1, len1 - j);
len1--;
j--;
}
}
}
}
int main() {
char s1[256] = "abcdefg";
char s2[256] = "cde";
deleteCharacters(s1, s2);
printf("%s\n", s1);
return 0;
}
```
在上面的代码中,首先定义了一个deleteCharacters函数来执行删除操作。然后,在main函数中,我们定义了两个字符串s1和s2,并将它们传递给deleteCharacters函数。最后,打印修改后的字符串s1。
该程序的输出结果为:"abfg",即删除了s1中出现在s2中的字符"d"和"e"。
以上就是一个解决这个问题的简单示例程序。在实际使用中,还需要进一步考虑边界情况和错误处理。
阅读全文