用c++ 你的儿子小明打字水平有限,当他希望打出某个单词如 smart 时,他会错误地按到键盘上其他字母键盘,例如形成 asnmaaaert 这样的尴尬情况。更加令人崩溃的是,小明还不会用"退回"键或者删除功能来清理错误字母,现在请你识别出真正单词每个字母在错误单词中的位置。 先输入一行字符串,代表小明的打字内容。第二行字符串代表小明真实希望打的单词。小明会确保正确单词所有字母都会依次出现在他打的内容里。 输入输出格式 输入格式 输入文件typist1.in 有两行字符串a和b,都由小写字母组成。长度均不超过1000。 输出格式 输出文件typist1.out 一行整数,由空格隔开,依次代表b单词每一个字母在a字符串里是第几个。如果有多种可能,输出位置最小的一组。 输入输出样例 输入样例#1: loops oops 输出样例#1: 2 3 4 5 输入样例#2: cuonmutputerr computer 输出样例#2: 1 3 5 8 9 10 11 12 输入样例#3: 无 输出样例#3: 无
时间: 2024-04-12 07:29:19 浏览: 37
这个问题可以通过遍历输入的字符串进行解决。我们可以使用两个指针,一个指向输入字符串的当前位置,另一个指向目标单词的当前位置。在遍历过程中,如果两个字符匹配,则将目标单词的当前位置输出,并将两个指针都向后移动一位。如果不匹配,则只将输入字符串的指针向后移动一位。以下是用C++实现的代码:
```cpp
#include <iostream>
#include <string>
using namespace std;
int main() {
string input, target;
cin >> input >> target;
int inputPtr = 0, targetPtr = 0;
bool found = false;
while (inputPtr < input.length() && targetPtr < target.length()) {
if (input[inputPtr] == target[targetPtr]) {
cout << inputPtr + 1 << " ";
inputPtr++;
targetPtr++;
found = true;
} else {
inputPtr++;
}
}
if (!found) {
cout << "无";
}
return 0;
}
```
这段代码首先读取输入的两个字符串,然后使用两个指针分别指向字符串的起始位置。然后,使用一个循环来遍历输入字符串。在每次循环中,检查当前字符是否与目标单词的当前字符匹配。如果匹配,则输出当前位置(加1,因为题目要求位置从1开始),然后将两个指针都向后移动一位。如果不匹配,则只将输入字符串的指针向后移动一位。循环结束后,如果没有找到匹配的字符,输出"无"。
希望能帮到你!如果有任何疑问,请随时提问。