zoukankan      html  css  js  c++  java
  • NOI-OJ 1.7 ID:21 单词替换

    整体思路

    • 本题如果使用scanf每次读入一个单词、比对替换后再进行输出的话就十分简单,使用这种方法必须要用数组把读入的所有单词存起来,读入的count个单词的前n-2个是原文,第n-1个是查找的单词,第n个是替换值。

    • 如果要求设计一个函数replace(原文,被替换单词,替换值),这就稍有些难度,但这样的设计训练是有意义的,因为replace函数是在各种程序设计语言中常用的字符串处理函数,理解其工作原理十分重要。基本思路:

      1. 从0开始依次处理原文每一个字符
      2. 从该位置开始使用strncmp和被替换单词进行对比,并且对该部分的有效性进行判断,判断方法见代码。对比成功且有效则输出替换值,修改位置坐标为当前位置+被替换单词长度后重复第2步。
      3. 第2步对比或有效性判断不成功,则直接输出该字符,当前位置+1,回到第2步
    • 本题提供两个例程用于参考:

    例程1:设计replace函数

    #include<iostream>
    #include<cstring>
    using namespace std;
    void replace(char S[], char A[], char B[]);			//replace函数声明
    int main(){											//主函数十分清晰
    	char s[101], a[101], b[101];
    	gets(s);
    	gets(a);
    	gets(b);
    	replace(s, a, b);
    	return 0;
    }
    void replace(char S[], char A[], char B[]){			//注意形参的写法
    	int lenS=strlen(S);
    	int lenA=strlen(A);
    	int lenB=strlen(B);
    	int i=0;
    	while(i<lenS){	//有效性原则——头:下标为0或前一个字符为空格,尾:原文[下标+lenA]为结束符或空格
    		if(strncmp(S+i, A, lenA)==0 && (i==0 || S[i-1]==' ') && (S[i+lenA]=='' || S[i+lenA]==' ')){
    			printf("%s", B);
    			i+=lenA;
    		}else{
    			printf("%c", S[i]);
    			i++;
    		}
    	}
    }
    

    例程2:数组存储

    #include<iostream>
    #include<cstring>
    using namespace std;
    int main(){
    	char t[200][200];							//二维数组,可容纳200行长度为199的字符串
    	int  n=0; 
    	while(scanf("%s", t[++n])!=EOF)  ;			//下标从1开始便于引用,注意这里二维数组的使用
    												//t[n]代表第n行字符串的首地址,故前面不用加“&”
    	n--;										//最后一次读取是失败的,所以n要减一  
    	for(int i=1; i<=n-2; i++){
    		if(strcmp(t[i], t[n-1])==0)
    			printf((i==1)?"%s":" %s", t[n]);	//用三元运算符控制输出格式,第一次输出单词 
    		else									//以后每次输出空格+单词 
    			printf((i==1)?"%s":" %s", t[i]);
    	}
    	return 0;
    }
  • 相关阅读:
    【原】 POJ 1012 Joseph 约瑟夫 解题报告
    【原】 POJ 1001 Exponentiation 大整数乘法 解题报告
    POJ——1517
    毕业了,校园里走走看看——华中科技大学
    毕业答辩后
    CV编程常用的获取鼠标圈定区域的方法
    送走了GB
    POJ——2546
    奥巴马在YY21#524
    POJ——3517
  • 原文地址:https://www.cnblogs.com/lfyzoi/p/6698148.html
Copyright © 2011-2022 走看看