字串操作(C 程式設計第7周)

2021-07-09 04:31:02 字數 3947 閱讀 5056

問題描述

給定n個字串(從1開始編號),每個字串中的字元位置從0開始編號,長度為1-500,現有如下若干操作:

copy n x l:取出第n個字串第x個字元開始的長度為l的字串。

add s1 s2:判斷s1,s2是否為0-99999之間的整數,若是則將其轉化為整數做加法,若不是,則作字串加法,返回的值為一字串。

find s n:在第n個字串中從左開始找尋s字串,返回其第一次出現的位置,若沒有找到,返回字串的長度。

rfind s n:在第n個字串中從右開始找尋s字串,返回其第一次出現的位置,若沒有找到,返回字串的長度。

insert s n x:在第n個字串的第x個字元位置中插入s字串。

reset s n:將第n個字串變為s。

print n:列印輸出第n個字串。

printall:列印輸出所有字串。

over:結束操作。

其中n,x,l可由find與rfind操作表示式構成,s,s1,s2可由copy與add操作表示式構成。

輸入

第一行為乙個整數n(n在1-20之間)

接下來n行為n個字串,字串不包含空格及操作命令等。

接下來若干行為一系列操作,直到over結束。

輸出

根據操作提示輸出對應字串。

樣例輸入

3

329strjvc

opadfk48

ifjoqwoqejr

insert copy

1 find212

22print

2reset add copy

1 find313

copy

2 find222

3print

3insert a3

2printall

over

樣例輸出

op29adfk48

358329strjvc

op29adfk48

35a8

提示

1.推薦使用string類中的相關操作函式。

2.這道題其實難點在遞迴。

3.add s1 s2這個命令需要注意itoa(」83s」)返回值為83 。

4.**還是寫的有點亂啊,有些地方寫的不好,寫完就懶得改了

原始碼

#include 

#include

#include

#include

#include //atoi字串轉整數的函式

#include //memset函式標頭檔案

#include //sprintf函式標頭檔案

using

namespace

std;

vector

strgiven;//儲存被給的字串

queue

strcommand;//儲存命令字串

char* stritoa = new

char[101];//儲存將整數轉換的字串,並作返回值使用

void strstorage(const

char* ch);//將輸入的一行資料分為若干個命令引數,並存入佇列當中

bool strprocess();//開始處理一行命令,注意開頭的命令只可能是「insert」「reset」「print」「printall」和「over」

string commandop();//遞迴演算法處理一行中的命令組合

string nycopy(int n, int x, int l);//copy n x l:取出第n個字串第x個字元開始的長度為l的字串

string nyadd(string s1, string s2);//add s1 s2:判斷s1,s2是否為0-99999之間的整數,若是則將其轉化為整數做加法,若不是,則作字串加法,返回的值為一字串

int nyfind(int n, string s);//find s n:在第n個字串中從左開始找尋s字串,返回其第一次出現的位置,若沒有找到,返回字串的長度。

int nyrfind(int n, string s);//rfind s n:在第n個字串中從右開始找尋s字串,返回其第一次出現的位置,若沒有找到,返回字串的長度。

void nyinsert(int n, int x, string s);//在第n個字串的第x個字元位置中插入s字串

void nyreset(int n, string s);//將第n個字串變為s

void nyprint(int n);//列印輸出第n個字串

void nyprintall();//列印輸出所有字串

int main()

cin.get();

char* ch = new

char[501];

while(1)

}delete ch;

delete stritoa;

return0;}

/*將輸入的一行資料分為若干個命令引數,並存入佇列當中

*/void strstorage(const

char* ch)

else

}//記錄最後乙個字串

strcommand.push(str);}/*

開始處理一行命令,注意開頭的命令只可能是「insert」「reset」「print」「printall」和「over」

遇到"over"時返回false,程式結束

*/bool strprocess()

else

if (str == "reset")

else

if (str == "print")

else

if (str == "printall")

else

if (str == "over")

return

true;}/*

遞迴演算法處理一行中的命令組合

*/string commandop()

else

if (str == "add")

else

if (str == "find")

else

if (str == "rfind")

else

//引數

}/*copy函式

*/string nycopy(int n, int x, int l)

/*add函式

*/string nyadd(string s1, string s2)

}for (int i = 0; i < s2.size(); i++)

}//若全為數字,判斷是否在0和99999之間

long a = atoi(s1.c_str());

long b = atoi(s2.c_str());

if (a >= 0 && a <= 99999 && b >= 0 && b <= 99999)

else

}/*find函式

*/int nyfind(int n, string s)

else

}/*rfind函式

*/int nyrfind(int n, string s)

else

}/*insert函式

*/void nyinsert(int n, int x, string s)

/*reset函式

*/void nyreset(int n, string s)

/*print函式

*/void nyprint(int n)

/*printall函式

*/void nyprintall()

}

程式設計題 7 字串排序(C 程式設計第10周)

描述 請按照要求對輸入的字串進行排序。include include include using namespace std class a friend bool operator const class a a1,const class a a2 friend bool operator con...

程式設計題 4 字串操作(C 程式設計第9周)

描述 給定n個字串 從1開始編號 每個字串中的字元位置從0開始編號,長度為1 500,現有如下若干操作 copy n x l 取出第n個字串第x個字元開始的長度為l的字串。add s1 s2 判斷s1,s2是否為0 99999之間的整數,若是則將其轉化為整數做加法,若不是,則作字串加法,返回的值為一...

C語言程式設計高階 第1周程式設計題(指標與字串)

1 字串比對 10分 題目內容 題目說起來很簡單,你會讀到兩個字串,每個字串佔據一行,每個字串的長度均小於10000字元,而且第乙個字串的長度小於第二個字串的。你的程式要找出第乙個字串在第二個字串 現的位置,輸出這些位置,如果找不到,則輸出 1。注意,第乙個字元的位置是0。注意,第乙個字串在第二個字...