機試指南練習 第八章

2021-10-10 00:18:40 字數 3908 閱讀 1588

熟悉stl中常用的stringmap等資料結構的使用

對於string物件,可以直接使用=實現深拷貝,同時對於string還有以下幾個需要熟悉的函式

str.

size()

;//求字串的大小

str1 = str1 +

"a";

//直接拼接字串

str.

insert

(index, str1)

;//在index的位置插入字串str1

str.

insert

(index, count, s)

;//在index的位置插入cout個字元s

str.

erase

(index, cout)

;//從index位置開始刪除cout個字元

str.

find

(str1, startpos)

;//從startpos位置開始查詢字串str1,若找到則返回第一次出現的下標,若不能找到,則返回string::npos

stl中map模板的使用

mapint> mp;

//初始化

mp.clear()

;//清空map

mp.find

(b);

//查詢mp中使用有b的對映,如果有的話返回對應的迭代器,如果沒有的話返回mp.end()

mp.cout

(b);

//查詢元素b,是否存在,有0,1兩個值

未找到提交oj

題目描述

給定乙個短字串(不含空格),再給定若干字串,在這些字串中刪除所含有的短字串

輸入描述

輸入只有1組資料。

輸入乙個短字串(不含空格),再輸入若干字串直到檔案結束為止。

輸出描述:

刪除輸入的短字串(不區分大小寫)並去掉空格,輸出
示例1

輸入:

in

#include

intmain()

輸出:

#clude

tma(

)

解題思路

本題主要有兩個難點,第乙個是資料的讀入,可知本題中輸入資料是一行一行讀入的,可以使用getline(cin, str),或者gets(str),第乙個函式是c++中的,第二個函式是c中的(str必須是字元指標)

第二個難點就是要忽略大小寫,這一點就使得不能直接使用string中的find函式來進行查詢。我的解決思路就是直接回歸最原始方法,乙個乙個遍歷字元來查詢字串,同時在查詢到之後對字串進行刪除。**如下:

#include

#include

#include

#define max 1000

using namespace std;

//判斷是否到檔案結尾

intmain()

i++; j++;}

if(tar[i]

!= str[j]

&&'a'

+(tar[i]

-'a'

)!= str[j]

&&'a'

+(tar[i]

-'a'

)== str[j]

) i--

; j =0;

} s2 = tar.

size()

;for

(i=0

; i) cout<}return0;

}

其他思路

需要總結的一些知識點

提交oj

題目描述

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

輸入描述

多組資料。每組資料輸入包括3行, 第1行是包含多個單詞的字串 s, 第2行是待替換的單詞

a,(長度<=

100) 第3行是a將被替換的單詞b。(長度<=

100) s, a, b 最前面和最後面都沒有

空格.

輸出描述:

每個測試資料輸出只有 1 行, 將s中所有單詞a替換成b之後的字串。
示例1

輸入:

you want someone to help you

youi

輸出:

i want someone to help you
解題思路

本題我是直接使用string類中的erasefind函式來解決的,解題過程中碰到兩個坑點

需要注意題目中是將乙個單詞替換為另乙個單詞,同時單詞和單詞之間有空格分隔,這就意味著當ccc是cc的字首表示式時不能被替換

string類中find函式返回值的問題,stringfind函式在沒有找到目標時返回的是string::npos,要注意的是,這個數的型別是string::size_type,不能使用unsigned int或者int來存,要不然就會出錯。我一開始使用unsigned int來儲存,在本題測試沒問題,但是提交到oj上之後就一直報陣列越界,就是由於當使用unsigned int儲存時會使t != string::npos失效。

#include

#include

#include

using namespace std;

//發生越界錯誤

intmain()

str.

erase(0

,1);

str.

erase

(str.

size()

-1,1

);cout<}return0;

}

其他思路

需要總結的一些知識點

//1,使用string::size_type型別來儲存,然後在判斷

string:

:size_type t = str.

find

(a);

while

(t != string:

:npos)

//2,在判斷是否為string::npos之後再使用int儲存

while

(str.

find

(a)!= string:

:npos)

第八章上課練習

向student表中插入資料 語法 insert into 表名 列名 values 值列表 insert into student studentno,loginpwd,studentname,gradeid,phone,address,borndate,email values s1304002...

第八章 指標 第八章 指標

1 什麼是位址 include using namespace std int main 11 在堆中建立對像 我們既然可以在堆中儲存變數,那麼也就可以儲存對像,我們可以將對像儲存堆中,然後通過指標來訪問它 include using namespace std class human 14 在建構...

第八章 8 1 2節練習

決定開博寫文的時候,我已經看到第8章了。這裡,從第8章開始。當然之前的章節,會在後面補上。分界線 題目 練習8.1 編寫函式,接受乙個istream 引數,返回值型別也是istream 此函式須從給定流中讀取資料,直至遇到檔案結束標識時停止。將讀取的資料列印在標準輸出上。完成這些後,在返回留之前。對...