C++ 如何修复此代码的限制
在这段代码中,我想在字符串行中搜索一个单词,如果找到了这个单词,我想反转这个单词。例如:<代码>这是C++语言< /代码>这是字符串行,我想知道“代码> C++ +代码> >是否存在。如果存在,则打印这一行C++ 如何修复此代码的限制,c++,C++,在这段代码中,我想在字符串行中搜索一个单词,如果找到了这个单词,我想反转这个单词。例如:这是C++语言< /代码>这是字符串行,我想知道“代码> C++ +代码> >是否存在。如果存在,则打印这一行这是++c语言。因此,在这一行中,单词已经从C++变成了++C。我该怎么做呢 # include<iostream> using namespace std; int main() { int i, j,flage=0,count=0; char a[] = { "Th
这是++c语言
。因此,在这一行中,单词已经从C++变成了++C。我该怎么做呢
# include<iostream>
using namespace std;
int main() {
int i, j,flage=0,count=0;
char a[] = { "This is bangladesh." };
char b[788];
cout<<"Before searching\n";
cout<<"****************************"<<endl;
for (int m=0; a[m]!='\0';m++)
{
cout<<a[m];
}
cout<<endl;
cout<<"Write what you want to search from above line: ";
cin>>b;
cout<<endl;
cout<<"after searching \n";
cout<<"*****************************"<<endl;
for (int p=0; b[p]!='\0';p++)
{
count++;
}
for (i = 0; a[i] != '\0'; i++)
{
for (j = 0; b[j] != '\0'; j++)
{
if (a[j + i] != b[j])
break;
}
if (b[j] == '\0')
flage = 1;
}
if (flage == 1)
{
cout << "This is a ";
for (i =count; i >= 0; i--)
cout << b[i];
}
cout<<"\n\n\n\n";
return 0;
}
#包括
使用名称空间std;
int main(){
inti,j,flage=0,count=0;
char a[]={“这是孟加拉国。”};
charb[788];
cout我假设这是一项学习任务,所以让您使用现有函数是不可能的
有鉴于此,请将问题分为以下几个函数:
首先,您需要找到要查找的单词的起始索引。
找到起始索引后,找到最后一个索引(这应该很容易)
现在,开始交换:将第一个索引的内容与最后一个交换,向前移动第一步,向后移动最后一步,然后再次交换。这样做直到交换所有单词
如果可以的话,还有一件事。给变量更多的描述性名称。“a”和“b”不是真正的描述性…试试这个
void reverse(char *x, int begin, int end)
{
char c;
if(begin>=end)return;
c=*(x+begin);
*(x+begin)=*(x+end);
*(x+end)= c;
reverse(x, ++begin, --end);
}
int main()
{
int i, j,flage=0,count=0;
char a[] = { "This is bangladesh." };
char b[788];
cout<<"Before searching\n";
cout<<"****************************"<<endl;
cout<<a;
cout<<endl;
cout<<"Write what you want to search from above line: ";
cin>>b;
cout<<endl;
cout<<"after searching \n";
cout<<"*****************************"<<endl;
char *ptr=strstr(a,b);
// in "This is bangladesh" if you search for "is" it will come twice.. so check for word
while(ptr && *(ptr-1)!=' ') //search for word
{
ptr+=strlen(b);
ptr=strstr(ptr,b);
}
if(ptr)
{
reverse(b,0,strlen(b)-1);
cout<<"string found\n";
memcpy(ptr,b,strlen(b));
cout<<a;
}
else
cout<<"string not found\n";
cout<<"\n\n\n\n";
return 0;
}
void reverse(字符*x,整数开始,整数结束)
{
字符c;
如果(开始>=结束)返回;
c=*(x+begin);
*(x+开始)=*(x+结束);
*(x+end)=c;
反向(x,++开始,--结束);
}
int main()
{
inti,j,flage=0,count=0;
char a[]={“这是孟加拉国。”};
charb[788];
不能包含
使用名称空间std;
int main(){
inti,j,flage=0,count=0;
char a[]={“这是孟加拉国。”};
charb[788];
您是否考虑过使用std::string
——它提供了find
成员函数,或者如果您坚持使用C风格的ASCIIZ(即'\0'
NUL终止)字符串,然后使用strstr()
进行搜索,以及strlen()
查找长度?但我不想使用库函数。然后我建议您实现这些函数(strstr
是用于此目的的必需函数)然后分别使用它/它们来编写更高级的代码。这将为您的解决方案提供更多的结构,使其更易于测试,同时教会您同样多的东西。
# include<iostream>
using namespace std;
int main() {
int i, j,flage=0,count=0;
char a[] = { "This is bangladesh." };
char b[788];
cout<<"Before searching\n";
cout<<"****************************"<<endl;
for (int m=0; a[m]!='\0';m++)
{
cout<<a[m];
}
cout<<endl;
cout<<"Write what you want to search from above line: ";
cin>>b;
cout<<endl;
cout<<"after searching \n";
cout<<"*****************************"<<endl;
for (int p=0; b[p]!='\0';p++)
{
count++;
}
for (i = 0; a[i] != '\0'; i++)
{
for (j = 0; b[j] != '\0'; j++)
{
if (a[j + i] != b[j])
break;
}
if (b[j] == '\0')
flage = 1;
}
if (flage == 1)
{
cout << "This is a ";
for (i =count; i >= 0; i--)
cout << b[i];
}
else //Reverse the string
{
char *p = b[i], *s = b[i] + strlen(b[i]) - 1;
while (p < s) {
char tmp = *p;
*p++ = *s;
*s-- = tmp;
}
}
cout<<"\n\n\n\n";
return 0;
}