我正在努力完成一项需要输入两个字符串S& str然后传递三个结果(不使用任何字符串库):
1.确定S中给定str的数字和位置
2.在任何可能发生的str删除的情况下返回S
离。如果S = aababacd cdefgh , STR = ABA
频率 2 ,位置< 0,2>
字符删除将是 cd cdefgh
附加代码是我到目前为止所做的,我可以输出频率和位置,但现在我几个未解决的问题,我不知道如何实现它。
1.我在那里输入一个带空格的字符串,例如abcd efg,代码会立即实现它,它不会将abcd efg视为一个字符串但是将其视为 S = abcd和str = efg ,这个问题我不能输入一个带空格的字符串进行测试。
2.如何输出这样的位置:< 0,2> ,因为我使用循环输出结果所以它不能那样,我在想我是否可以创建一个数组来存储我然后cout它,但我失败了。
3.关于角色删除问题,我发现了一个similar problem,它说如果我知道如何使用strcpy而不使用库那么我会知道,但我学到了它,我仍然不知道如何处理这个问题,我知道我可以比较这两个字符串,但我不知道如何在没有str部分的情况下输出S.我正在考虑将S改为' \ 0'在循环之后输出它,但那是完全错误的。
如果有人能给我一些建议,我将非常感激,谢谢!
#include <iostream>
#include <algorithm>
using namespace std;
void CharacterDelete(){
char S[100], str[100];
bool match =true;
cout << "Enter string S :";
cin >> S;
cout << "Enter string str :";
cin>>str;
for(int i=0; S[i]!='\0'; i++)
{
for(int j=0; str[j]!='\0';j++){
if(S[i+j]!=str[j]){
match=false;
break;
}
if(match){
S[i+j]='\0';
}
}
}
cout<<S;//Apparently thats a wrong solution
}
void Frequency(){
string S,str;
cout<<"Please input string S"<<endl;
cin>>S;
cout<<"Please input string str"<<endl;
cin>>str;
int sum=0;
for (int i=0; i<S.size(); i++)
{
if (i + str.size() > S.size()) break;
bool match=true;
for (int j=0; j<str.size(); j++)
if (S[i+j] != str[j])
{
match=false;
break;
//Once we print blank space and it would implement it immediately?
}
if(match)
{
sum++;
cout<<"Start from"<<i<<endl;
//What if we use an array to store it and then output it?but how to write it?
}
}
cout<<"The Frequency is "<<sum<<endl;
if(sum==0){
cout<<"There is no starting point"<<endl;
}
}
int main() {
Frequency();
CharacterDelete();
return 0;
}
答案 0 :(得分:0)
您正在使用局部变量S和str。你需要在main函数中使用S和str。然后在Frequency()和CharacterDelete中从main传输这个变量。
删除字符:创建新变量,然后复制没有删除字符的字符。
输出:
cout << "<" << num_word << ", " << number << ">\n";