程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 【九度OJ】題目1111:單詞替換,九度oj1111替換

【九度OJ】題目1111:單詞替換,九度oj1111替換

編輯:C++入門知識

【九度OJ】題目1111:單詞替換,九度oj1111替換


題目1111:單詞替換

題目描述:

輸入一個字符串,以回車結束(字符串長度<=100)。該字符串由若干個單詞組成,單詞之間用一個空格隔開,所有單詞區分大小寫。現需要將其中的某個單詞替換成另一個單詞,並輸出替換之後的字符串。

 

輸入:
多組數據。每組數據輸入包括3行, 第1行是包含多個單詞的字符串 s, 第2行是待替換的單詞a,(長度<=100) 第3行是a將被替換的單詞b。(長度<=100)   s, a, b 最前面和最後面都沒有空格.

 

輸出:
每個測試數據輸出只有 1 行, 將s中所有單詞a替換成b之後的字符串。

 

樣例輸入:
You want someone to help you
You
I
樣例輸出:
I want someone to help you

#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    string s, a, b;
    while(getline(cin, s))
    {
        getline(cin, a);
        getline(cin, b);
 
        for(int i = 0; i < s.length(); i++)
        {
            if(s.length() - i >= a.length())
            {
                if(s.substr(i, a.length()) == a
                   && (i == 0 || s[i - 1] == ' ')
                   && (i == s.length() - a.length() || s[i + a.length()] == ' '))
                {
                    s.replace(i, a.length(), b);
                }
            }
            else
                break;
        }
        cout << s << endl;
    }
    return 0;
}
/**************************************************************
    Problem: 1111
    User: 文劍木然
    Language: C++
    Result: Accepted
    Time:0 ms
    Memory:1520 kb
****************************************************************/

【總結】

對於C++中的字符串操作還比較陌生,代碼寫得比較繁瑣。

主要注意要點:

1、cin >> s 會將空格作為輸入結束,所以要用getline(cin, s)。

getline還有一些細節上的問題需要注意。

2、要注意判斷單詞邊界

 

之前的錯誤答案:

#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    string s, a, b;
    while(getline(cin, s))
    {
        getline(cin, a);
        getline(cin, b);
        if(s.length() >= a.length())
        {
            for(int i = 0; i <= s.length() - a.length(); i++)
            {
                if(s.substr(i, a.length()) == a
                        && (i == 0 || ' ' == s[i - 1])
                        && (i == s.length() - a.length() || ' ' == s[i + a.length()]))
                {
                    s.replace(i, a.length(), b);
                }
            }
        }
        cout << s << endl;
    }
    return 0;
}
/**************************************************************
    Problem: 1111
    User: 文劍木然
    Language: C++
    Result: Runtime Error
****************************************************************/

【錯誤分析】

當輸入為

you
you
i

時,會發生錯誤。

terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::substr: __pos (which is 2) > this->size() (which is 1)

因為,執行替換後,循環終止條件

i <= s.length() - a.length()

恆滿足,也就是i的值將不斷增加,然後導致越界。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved