在C ++中查找和替换单词

时间:2014-12-04 04:50:53

标签: c++

我有一个程序来查找和替换C ++中的单词。

#include<iostream.h>
#include<string.h>

int main()
{
    char string[80], replace[80], found[80], str1[80], str2[80], str3[80];
    cout << "\nEnter string(max 3 words)\n";
    cin.getline(string , 80);
    cout << "\nEnter the word to be Found\n";
    cin.getline(found , 80);
    cout << "\nReplace with \n";
    cin.getline(replace , 80);

    for(int i = 0; string[i] != '\0'; i++)
    {
        str1[i] = string[i];
        if(str1[i] == " ")
            break;
    }

    for(int j = i; string[j] != '\0'; j++)
    {
        str2[j] = string[j];
        if(str2[j] == " ")
            break;
    }

    for(int k = j; string[k] != '\0'; k++)
    {
        str3[k] = string[k];
        if(str3[k] == " ")
            break;
    }

    cout << str1;
    cout << str2;
    cout << str3;
}

为此,我将每个单词存储为不同的字符串,但它没有帮助。

应该采取哪些措施来改善这一点?

3 个答案:

答案 0 :(得分:1)

在您当前的代码中,您需要:

  1. 使用单引号比较字符是否相等,而不是双引号
  2. 在第二个和第三个循环中增加另一个索引。这是因为str2和str3的索引需要从0开始,而不是在字符串中查看的当前位置
  3. 初始化第二个和第三个循环中的主字符串索引(i),使用(当前值+ 1)跳过它当前所在的空间。
  4. Null终止你的str1,str2,str3

1

if(str1[i] == " ")  

应该是

if(str1[i] == ' ')

2,3 而不是

for(int j = i;string[j] != '\0' ; j++)

DO

for (int j = 0, i = (i + 1); string[i] != '\0'; j++,i++)  

分配变为

str2 [j] = string [i];

对第3个循环执行相同操作(在j前面没有int或使用另一个字母)。为了保持一致性,您可以将从0开始的j变量添加到第一个循环。

4 在每个循环之后为空终止符添加赋值语句(每个c-string最后需要'\ 0'才能正常工作):

str1[i] = '\0';
str2[j] = '\0';
str3[j] = '\0';

答案 1 :(得分:1)

你的代码有太多逻辑和&amp;语法错误。

以下是修改后的代码,它将接受所需的字符串并打印预期的输出:

#include<iostream>
#include<string.h>

using namespace std;

void strreplace(string orgString, const string search, const string replace )
{
        for( size_t pos = 0; ; pos += replace.length() )
  {
          pos = orgString.find( search, pos );
          if( pos == string::npos )
                break;
          orgString.erase( pos, search.length() );
          orgString.insert( pos, replace);

        cout<<"String after replacement:"<<orgString<<endl;
  }
}

int main()
{
char string[80], replace[80], found[80], str1[80], str2[80], str3[80] ;
cout << "\nEnter string(max 3 words)\n" ;
cin.getline(string , 80);
cout <<"\nEnter the word to be Found\n";
cin.getline(found , 80);
cout <<"\nReplace with \n"      ;
cin.getline(replace , 80);

strreplace(string, found, replace);

return 0;
}

我希望这会对你有所帮助。

答案 2 :(得分:0)

std :: string不包含此类函数,您可以使用算法标题中的独立替换函数。

#include <algorithm>
#include <string>

string stringReplace(std::string toSearch, std::string toReplace, std::string originalString) {
    std::replace( originalString.begin(), originalString.end(), 'toSearch', 'toReplace'); // replace all 'toSearch' to 'toReplace'
    return originalString;
}