用c++写分别输入字符串S(主串)和字符串T(子串),补充下列程序输出T在S中第pos个字符之后的位置(1≤pos≤strlen(S))。
时间: 2024-02-06 21:02:56 浏览: 31
```c
#include<stdio.h>
#include<string.h>
int main(){
char S[100], T[100];
int pos, lenS, lenT;
printf("请输入字符串S:");
gets(S);
printf("请输入字符串T:");
gets(T);
printf("请输入pos:");
scanf("%d", &pos);
lenS = strlen(S);
lenT = strlen(T);
int i = pos - 1, j = 0, k;
while(i < lenS && j < lenT){
if(S[i] == T[j]){
i++;
j++;
}
else{
i = i - j + 1;
j = 0;
}
}
if(j == lenT){
k = i - lenT + 1;
printf("T在S中第%d个字符之后的位置是:%d\n", pos, k);
}
else{
printf("S中不存在T在第%d个字符之后的位置\n", pos);
}
return 0;
}
```
相关问题
分别输入字符串S(主串)和字符串T(子串),补充下列程序输出T在S中第pos个字符之后的位置(1≤pos≤strlen(S))。
```c++
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char S[101], T[101];
int pos;
cin >> S >> T >> pos;
int lenS = strlen(S), lenT = strlen(T);
for (int i = pos; i <= lenS - lenT + 1; i++) {
bool flag = true;
for (int j = 0; j < lenT; j++) {
if (S[i+j-1] != T[j]) {
flag = false;
break;
}
}
if (flag) {
cout << i;
return 0;
}
}
cout << -1;
return 0;
}
```
用c++完成从串s中删除所有和串t相同的子串。
以下是用 C++ 实现从字符串 s 中删除所有和字符串 t 相同的子串的代码:
```cpp
#include <iostream>
#include <string>
using namespace std;
void deleteSubstr(string& str, const string& substr) {
size_t pos = 0;
while ((pos = str.find(substr, pos)) != string::npos) {
str.erase(pos, substr.length());
}
}
int main() {
string s = "hello world hello";
string t = "hello";
deleteSubstr(s, t);
cout << s << endl; // 输出 " world "
return 0;
}
```
我们定义了一个 `deleteSubstr` 函数,它接收两个参数,一个是需要删除子串的字符串 `str`,另一个是要删除的子串 `substr`。
在函数体内,我们使用了 `string` 类的 `find` 函数来查找 `substr` 在 `str` 中出现的位置,如果找到了,就调用 `erase` 函数将该子串删除。
在主函数中,我们测试了一下这个函数的使用效果,输出的结果是除去了所有 "hello" 子串的字符串。