洛谷 P5734 【深基6.例6】文字处理软件 字符串处理
生活随笔
收集整理的這篇文章主要介紹了
洛谷 P5734 【深基6.例6】文字处理软件 字符串处理
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
洛谷 P5734 【深基6.例6】文字處理軟件
題目描述
你需要開發(fā)一款文字處理軟件。最開始時輸入一個字符串(不超過 100 個字符)作為初始文檔。可以認為文檔開頭是第 0 個字符。需要支持以下操作:
1 str:后接插入,在文檔后面插入字符串 str,并輸出文檔的字符串。
2 a b:截取文檔部分,只保留文檔中從第 a 個字符起 b 個字符,并輸出文檔的字符串。
3 a str:插入片段,在文檔中第 a 個字符前面插入字符串 str,并輸出文檔的字符串。
4 str:查找子串,查找字符串 str 在文檔中最先的位置并輸出;如果找不到輸出 -1。
為了簡化問題,規(guī)定初始的文檔和每次操作中的 str 都不含有空格或換行。最多會有 q(q\le100)q(q≤100) 次操作。
輸入輸出樣例
輸入
4
ILove
1 Luogu
2 5 5
3 3 guGugu
4 gu
輸出
ILoveLuogu
Luogu
LuoguGugugu
3
分析
字符串初級題目, 個人覺得是初學字符串和熟悉字符串函數(shù)很好的一道題目(對大佬們來說很簡單就是了)
根據(jù)1,2,3,4不同的要求, 分別想到使用<string.h>中對應(yīng)的函數(shù)
另外, 可以使用puts()函數(shù)打印一個字符串, 該函數(shù)末尾自帶一個\n, 且效率要高于printf().
代碼
#include<stdio.h> #include<string.h> int main(void) {char a[110] = {0}, temp[110]; //注意初始化int q;scanf("%d", &q);scanf("%s", a);while(q--){int x, start, num, i, end, j;memset(temp,0,sizeof(temp));scanf("%d", &x);if( x==1){scanf("%s", temp);strncat(a, temp, strlen(temp));puts(a);}else if( x==2){scanf("%d %d", &start, &num);for( i=0; i<num; i++, start++){temp[i] = a[start];}temp[i] = '\0'; // strncpy(a,temp,strlen(temp)); //錯誤, 會多一部分字符 strcpy(a,temp);puts(a);}else if( x==3){scanf("%d", &end);for(i=end, j=0; a[i]!='\0'; i++, j++){temp[j] = a[i];}temp[j] = '\0';scanf("%s", &a[end]);strncat(a, temp, strlen(temp));puts(a);}else{scanf("%s", temp);if( strstr(a,temp)==NULL) //strstr的返回值為 *char 或 NULL{printf("-1\n"); //puts()用習慣了,用回printf()時注意\n}else{char *p = strstr(a,temp); // printf("a=%d\n", a); // printf("p=%d\n", p); // printf("a=%p\n", a); // printf("p=%p\n", p);printf("%d\n", (p-a)); }}} }收貨與反思
scanf("%s", &a[end]);
與下面這條語句對比一下:
scanf("%s", a);
可以發(fā)現(xiàn)這兩條語句后都是地址值. 之前對數(shù)組的地址和值的理解不是很深, 所以一直只會把字符串輸入到數(shù)組"0下標"開始的位置, 之后再有類似的題目, (如果有需要)可以放到"1下標"的位置了
總結(jié)
以上是生活随笔為你收集整理的洛谷 P5734 【深基6.例6】文字处理软件 字符串处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 性能监控分析软件,性能监控和
- 下一篇: ajax.request函数使用详解