描述
給定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
提示原始碼
#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...
字串操作(C 程式設計第7周)
問題描述 給定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。注意,第乙個字串在第二個字串中...