关于两种字符数据处理的讨论

第一种,没必要对输入的字符串进行保存

/*
  想法:边读取边判断
*/

#include<stdio.h>
#include<math.h>
#include<string.h>
int main(){
	char find[20]={0},ch;
	int read1=1,read2=1,read3=1;//设置多个判断的标志,用于打开,关闭
        flag=-1,i=0,count=0,sum=-1;
	char search[20]={0};// 要有比较的时候才要使用
	gets(find);//高效的读取
	while(1){
		ch=getchar();
		if(ch == '\n') break;
		if(ch == ' ' && read1 == 1) {
			search[i]='\0';
			if(cmpare(find,search) == 0){
				count++;
				if(read3 == 1){
					flag=sum;
					read3=0;
				}
			}
			while(--i > 0)
				search[i]=0;
			read1=0;	
			read2=1;//用于初始化search;
		}
		if(ch == ' ' && read1 == 0) continue;
		if (ch != ' ' && read2 == 1){
			sum++;
		}
		if(ch != ' '){
			search[i]=ch;
			i++;
			read1=1;
			read2=0;
		}//用多个if 并且将条件每个都标清楚
	}
	return 0;
} 

下面抽离出用于标准化的代码

/*
  用于不存放任何东西
*/
char ch,a[xxx];
int read1=1;
int read2=1;//看看用没有必要(补:有必要)
while(1){
      ch=getchar();
      if(ch == '\n') break;
      if(ch == ' ' && read1 == 1){
          //为字符的读取初始化;
          read1=0;
      }
      if(ch == ' ' && read == 0){
          continue;//用于跳过多余的空格
      }
      if(ch != ' '){
          a[i]=ch;
          i++;
          read1=1;
      }
}
/*
  用于存一些数字的基础代码
*/
#include<stdio.h>
#include<string.h>
int main(){
	char ch,a[1000]={0};
	int i=0;//
	int read1=1; 
	int read2=0;//看看用没有必要
	while(1){
	      ch=getchar();
	      if(ch == '\n') break;
	      if(ch == ' ' && read1 == 1){
	          	//为字符的读取初始化;
	          	read1=0;
	          	read2=1;
	      }
	      if(ch == ' ' && read1 == 0){
	          continue;//用于跳过多余的空格
	      }
	      if(ch != ' ' && read2 == 1){
	      		a[i]=' ';
	      		i++;
	          	a[i]=ch;
	          	i++;
	          	read1=1;
	          	read2=0;
	      }	
	      else if(ch != ' ' && read2 == 0){ // 一定要用else if 
	      		a[i]=ch;
	      		i++;
		  }
	}
	int len=strlen(a);//
	for(i=1;i<len;i++){//巧妙地将空格存在a[0]中来达到标准化 
		printf("%c",a[i]);
	}
	return 0;
}

posted @ 2022-10-31 17:13  MITE's_BKY  阅读(22)  评论(0)    收藏  举报