C语言输入字符串s和t(串长不超过80个字 符),将在字符串s中出现,但未在字符串t中出现的字符组成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符,输出u。 例如:当s="112345",t="2467"时,u="1135"。
时间: 2023-09-12 22:05:22 浏览: 47
### 回答1:
这道题可以使用一个布尔类型的数组来表示每个字符是否在字符串t中出现,然后遍历字符串s,将未在t中出现的字符加入到字符串u中。具体实现如下:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 80
int main() {
char s[MAX_LEN + 1], t[MAX_LEN + 1], u[MAX_LEN + 1];
bool appear[128] = {false}; // 用布尔类型数组记录每个字符是否在t中出现
scanf("%s %s", s, t);
for (int i = 0; i < strlen(t); i++) {
appear[t[i]] = true;
}
int u_len = 0;
for (int i = 0; i < strlen(s); i++) {
if (!appear[s[i]]) {
u[u_len++] = s[i];
}
}
u[u_len] = '\0'; // 在字符串末尾加上'\0'表示结束
printf("%s\n", u);
return 0;
}
```
这里使用了一个布尔类型的数组`appear[128]`,其中下标为字符的ASCII码,表示该字符是否出现在t字符串中。在遍历s字符串时,只需要判断`s[i]`这个字符是否在`t`中出现,如果没有出现,则把它加入到`u`字符串中。最后别忘了在`u`的末尾加上`\0`,表示字符串结束。
### 回答2:
要解决这个问题,可以按照以下步骤进行:
1. 创建一个长度为256的整型数组count,用来统计每个字符的出现次数。
2. 遍历字符串t,统计每个字符出现的次数,将出现的字符在count数组对应的位置加1。
3. 创建一个空字符串u。
4. 遍历字符串s,对于每个字符c,首先判断count数组中对应位置的值是否为0。若为0,则说明该字符在字符串t中未出现,将其加入字符串u,并将count数组中对应位置的值加1。
5. 最后输出字符串u即可。
下面是示例代码:
```c
#include <stdio.h>
#include <string.h>
void getNewString(char* s, char* t, char* u) {
int count[256] = {0};
int n = strlen(t);
for (int i = 0; i < n; i++) {
count[t[i]]++;
}
int m = strlen(s);
int k = 0;
for (int i = 0; i < m; i++) {
if (count[s[i]] == 0) {
u[k++] = s[i];
count[s[i]]++;
}
}
u[k] = '\0';
}
int main() {
char s[81] = "112345";
char t[81] = "2467";
char u[81];
getNewString(s, t, u);
printf("u = %s\n", u);
return 0;
}
```
此代码将输出:
u = 1135
### 回答3:
题目要求在字符串s中出现但未在字符串t中出现的字符组成一个新的字符串u,且u中的字符按原字符串中的顺序排列。
首先,我们可以遍历字符串s中的每个字符,判断该字符是否存在于字符串t中。可以使用一个布尔型的数组flags[i],其中i表示ASCII码的范围(0~127),用来记录每个字符是否在字符串t中出现过。
具体做法如下:
1. 初始化flags数组的所有元素为false。
2. 遍历字符串t中的每个字符,将对应ASCII码的flags元素设置为true。
3. 定义一个空字符串u,用来保存最终的结果。
4. 遍历字符串s中的每个字符,判断该字符对应的ASCII码在flags数组中是否为false,如果是,则将该字符添加到字符串u中。
5. 输出字符串u。
以下是用C语言实现的代码:
```c
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
void findUniqueCharacters(const char *s, const char *t, char *u) {
bool flags[128] = {false}; // 初始化flags数组的所有元素为false
// 遍历字符串t中的每个字符,将对应ASCII码的flags元素设置为true
for (int i = 0; i < strlen(t); i++) {
int index = t[i];
flags[index] = true;
}
int uIndex = 0; // u字符串的索引
// 遍历字符串s中的每个字符,判断该字符对应的ASCII码在flags数组中是否为false
// 如果是,则将该字符添加到字符串u中
for (int i = 0; i < strlen(s); i++) {
int index = s[i];
if (!flags[index]) {
u[uIndex++] = s[i];
}
}
u[uIndex] = '\0'; // 在字符串u的末尾添加字符串结束符
printf("u = %s\n", u); // 输出字符串u
}
int main() {
char s[80] = "112345";
char t[80] = "2467";
char u[80];
findUniqueCharacters(s, t, u);
return 0;
}
```
输出结果为:u = 1135