输入一行字符判断相邻两个字符是否相等C++
时间: 2023-12-21 11:03:05 浏览: 67
#include <stdio.h>
#include <string.h>
int main()
{
char str[100];
int len, i;
printf("请输入字符串:");
scanf("%s", str);
len = strlen(str);
for(i = 0; i < len - 1; i++)
{
if(str[i] == str[i+1])
printf("%c%c ", str[i], str[i+1]);
}
return 0;
}
相关问题
题目描述 已知字符串str。字符串str包含字符’x’,’y’。 如果相邻的两个字符不同,消除两个字符,优先从左边进行消除。 xyyx - > yx -> 输入描述: 输入多个字符。(1<=len<=1e5) 输出描述: 输出最后的分身 用c++编写
### 回答1:
题目要求你用 C 语言编写一个程序,输入一个字符串,字符串中只包含字符 'x' 和 'y',如果相邻的两个字符不同,就消除这两个字符,优先从左边进行消除,最终输出最后的字符串。
你可以使用一个循环来遍历字符串的每一个字符,并使用一个变量来存储字符串最终的结果。在循环中,如果当前字符和前一个字符不同,就将当前字符添加到结果字符串中。否则,就跳过当前字符,不将其添加到结果字符串中。
以下是 C 语言的示例代码:
```
#include <stdio.h>
#include <string.h>
int main()
{
char str[100001];
scanf("%s", str);
int len = strlen(str);
char result[100001];
int result_index = 0;
for (int i = 0; i < len; i++)
{
if (i == 0 || str[i] != str[i - 1])
{
result[result_index++] = str[i];
}
}
result[result_index] = '\0';
printf("%s\n", result);
return 0;
}
```
在这段代码中,我们首先读入字符串,然后遍历字符串的每一个字符。如果当前字符是字符串的第一个字符,或者当前字符和前一个字符不同,就将当前字符添加到结果字符串中。否则,
### 回答2:
输入:
xyyx
输出:
yx
输入:
xyxyxyxyx
输出:
xyxyx
输入:
xyyyx
输出:
yx
算法步骤:
1. 读取输入字符串str。
2. 创建一个空栈stack。
3. 从左到右遍历str中的每个字符c:
- 如果stack不为空且栈顶元素与当前字符c不相同,表示可以消除,将栈顶元素弹出。
- 否则,将当前字符c入栈。
4. 将栈中剩余的字符依次出栈并拼接成最终的结果字符串res。
5. 输出res。
C代码实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 100000
int main() {
char str[MAX_LEN];
scanf("%s", str);
int len = strlen(str);
char stack[MAX_LEN];
int top = -1;
for (int i = 0; i < len; i++) {
if (top >= 0 && stack[top] != str[i]) {
top--;
} else {
stack[++top] = str[i];
}
}
char res[MAX_LEN];
int index = 0;
while (top >= 0) {
res[index++] = stack[top--];
}
res[index] = '\0';
printf("%s\n", res);
return 0;
}
```
以上代码根据题目要求进行了求解,对字符串进行了消除相邻不同字符的操作,并输出最终结果。
### 回答3:
题目要求输入一个字符串,字符串中只包含字符'x'和'y'。如果相邻的两个字符不同,则消除这两个字符,优先从左边开始消除。最后输出消除完成后的字符串。
这道题可以使用栈来解决。遍历输入的字符串,如果栈为空或者栈顶字符与当前字符相同,则将当前字符入栈;否则,将栈顶字符出栈。最后将栈中的字符连接起来即可得到最后的结果。
具体的实现如下:
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100000
int main() {
char str[MAX_LEN];
scanf("%s", str);
int len = strlen(str);
char stack[MAX_LEN];
int top = -1;
for (int i = 0; i < len; i++) {
if (top == -1 || stack[top] == str[i]) {
stack[++top] = str[i];
} else {
top--;
}
}
stack[top + 1] = '\0';
printf("%s\n", stack);
return 0;
}
以上代码中,首先定义了一个栈stack和栈顶指针top,初始时栈为空,栈顶指针为-1。然后,遍历输入的字符串,如果栈为空或者栈顶字符与当前字符相同,则将当前字符入栈;否则,将栈顶字符出栈。最后,将栈中的字符连接起来,并输出最终的结果。
这样就完成了题目的要求,时间复杂度为O(n)。
有一排格子需要染色,每个格子只可以是RGB这3种颜色之一,要求相邻两格不能同色。目前有些格子已经有固定颜色不能改变了,剩下的格子可以选择染色。输入一串字符s代表格子情况,o代表空格RGB代表已有固定色。输出所有可能性,每行一种染色方法,按照字典序排列。 输入输出格式 输入格式 输入文件color.in 输入一行字符串,长度<=10 输出格式 输出文件color.out 输出若干行字符串,行末没有空格C++正确
好的,我会尽力回答你的问题。以下是 C++ 的实现代码:
```c++
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 15;
int n;
char s[N];
char ans[N]; // 存储当前染色方案
bool check(int k) {
// 判断第 k 个格子是否可以染色
if (k == 0) return true;
if (ans[k] == ans[k - 1]) return false;
return true;
}
void dfs(int u) {
if (u == n) {
cout << ans << endl;
return;
}
if (s[u] != 'o') {
ans[u] = s[u];
dfs(u + 1);
} else {
for (char c = 'R'; c <= 'B'; c++) {
ans[u] = c;
if (check(u)) dfs(u + 1);
}
}
}
int main() {
cin >> s;
n = strlen(s);
dfs(0);
return 0;
}
```
我们可以用深度优先搜索(DFS)来枚举所有可能的染色方案。对于每个格子,如果它有固定的颜色,我们就直接将颜色赋给对应位置;如果它可以染色,我们就依次枚举 RGB 三种颜色,判断当前颜色是否与前一个格子的颜色相同,如果不同则进行搜索,否则跳过。
最后将所有染色方案按照字典序排序输出即可。