- 一,说反话
今天遇到降维打击了,这道题我的思考方式停留在一维的字符串阶段,想通过空格的位置来分段,
再把这每一小段从后到前输入到一个新的一维的字符串,殊不知升维,可以用字符串数组定一变一的特性,
非常灵活的把句子逆化,而且复杂度可以接受,属于空间换时间的典范。主要的分知识点有:
1.判别空字符,它占一个字符长度
2.虽然是没运行出来,但总的来讲最大的收获就是不要命名想一出是一出,一会儿不看很容易断思路 //算是我编的至今最长的代码了
#include<stdio.h>
#include<string.h>
const int max=80;
int main(){
	char str[max];  //空格和换行符  ' '  和 \n 
	memset(str,0,sizeof(str));
	int a[max];
	a[max]={0};
	
	gets(str);
	int m=strlen(str); 
	int j=0;
    for(int i=0;i<m;i++){  //把空格位置放到数组里 
    	if(str[i]==' ') {   // if 语句如果不打括号 只执行相邻一句 
    	a[j]=i;
    	j++;     //最大位置的空格在a[j]里 
    	} 
	}
	printf("%d",j) ;
	char strnew[max];
	memset(strnew,0,s
izeof(strnew));
	int b=j;    // 把总空格数数转变为a 
	printf("%d",b); 
	while(b<0){   //两个空格有三个片段 
		int w=1; //记录空格的次数 
		if(b==j){        //最后一段具有特殊性 
	   	for( ;a[j]<m;a[j]++,j++) { //把最后一个空格之后的给strnew 
	       int n=0;
		   strnew[n++]  = str[j+1];
	  	}	
	  	strnew[b-j+w]={' '}; w++; //每个单词后加空格 
	    }else {
	    	for(;a[j-1]<a[j];a[j-1]++){
	    		strnew[b-j+w]=str[a[j-1]+1];
	    		w++;
			}
		strnew[b-j+w]={' '}; w++; 
		}
		b--;
	}
	return 1;
}
3.if else之间的关系
他两执行是二选一,但如果配合循环while or for ,其实有一定关联,例如else的语句可以重置if中的变量
#include<stdio.h>
#include<string.h>
int main(){
	char str[90];
	gets(str);
	int len=strlen(str),r,h=0;
	char ans[90][90];
	for(int i=0;i<len;i++){
		if(str[i]!=' '){
			ans[r][h++]=str[i];
		}else{
			ans[r][h]='\0';
			r++;
			h=0;
		}
	}
	for(int i=r;i>=0;i--){
		printf("%s",ans[i]);      // printf虽说无法识别空格也能用for连成一句的样子 
		if(i>0) printf(" ");
	}
	return 1;
}
- 二,回文串
这题相对简单只要搞清楚数学原理,以及最简单的strlen函数就可以出来,具体收获有:
1.sizeof和strlen区别,一个只看分配的内存空间,一个只看字符所占空间
2.字符的相同也可以用== 号 ,这个疏忽了
#include<cstdio>
#include<cstring>
const int max=256; 
int main(){
	char str[max];
	memset(str,0,sizeof(str));
	gets(str);
	int a=strlen(str);   //sizeof 只能得到所分配的空间 
//	printf("%d",a);
    int m=0;
	for(int i=0;i<(a/2);i++){          //如何判断字符是一致的??? 
    	if(str[i]==str[a-i-1])  m++;    // == 号可以直接判断 
    }
    
	if(m==(a/2))  printf("YES");
	else      printf("NO") ;  
	return 1;
	
}
 
                    
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号