一些练习题
Posted df11g
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一些练习题相关的知识,希望对你有一定的参考价值。
1. 句子反转
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 5 void reverse_word(char *string, int len); 6 void reverse_sentense( char *string); 7 8 int main(int argc, char* argv[]) 9 { 10 char str[1000]; 11 printf("please input reverse string: "); 12 gets(str); 13 //scanf("%s",str); 14 printf("before = %s ",str); 15 reverse_sentense(str); 16 printf("after = %s ",str); 17 return 0; 18 } 19 20 void reverse_sentense( char *string) 21 { 22 int temp = 0; 23 int j; 24 int i = strlen(string); 25 if((string==NULL)||(i>1000)) 26 printf("input sentense string not valid "); 27 for(j=0;j<i+1;j++) 28 { 29 if((*(string+j)==0x20)||(*(string+j)==0x0)) 30 { 31 //printf("find pos j = %d, temp=%d ",j,temp); 32 reverse_word((char*)string+temp, j-temp); 33 temp=j+1; 34 } 35 36 } 37 reverse_word(string,strlen(string)); 38 39 } 40 41 void reverse_word(char *string, int len) 42 { 43 char temp; 44 int j; 45 if((string==NULL)||(len>1000)) 46 printf("input word string not valid "); 47 for(j=0;j<len/2;j++) 48 { 49 temp = *(string+j); 50 *(string+j) = *(string+len-1-j); 51 *(string+len-1-j) = temp; 52 } 53 return; 54 }
1. 编译存在警告:warning: ‘gets‘ is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations] 。gets在新版的编译器中一般认为是危险的,因为有可能导致越界访问,可以忽略这样的警告。
如果使用scanf接收字符串的话,在串首遇到空格的话,跳过,继续寻找下一个非空格字符,在串中遇到空格时,会结束字符串的输入,因此实现比较困难。
向缓冲区读取字符时
1.scanf()用%c,%s空格键,Tab键,回车键结束一次输入,不会舍弃最后的回车符或空格或Tab(即还在缓冲区中),可使用getchar来吸收scanf()执行之后的换行符。
2.getchar()以回车键结束,也不会舍弃回车符(即存入缓存区)
3.gets()以换行符结束,但之后会舍弃换行符并以‘ ‘,代替(意思是‘
‘不会被代入到字符数组中,也不会将换行符存入到缓存区)也就是说:gets()函数读取到
(我们输入的回车)于是停止读取,但是它不会把
包含到字符串里面去。然而,和它配合使用的puts函数,却在输出字符串的时候自动换行。
2. 29行字符比较,可以使用ASCII值比较,也可以直接比较字符:
if((*(string+j)==‘ ‘)||(*(string+j)==‘ ‘))
对于字符串,不能直接使用==进行比较,需要使用strcmp等函数
以上是关于一些练习题的主要内容,如果未能解决你的问题,请参考以下文章