Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何修复此代码的限制_C++ - Fatal编程技术网

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语言
。因此,在这一行中,单词已经从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;

}