task1.1
问题一:找出数组中的最大值和最小值;
问题二:指向一个x[0]的地址;
taks1.2
问题一:找出数组中最大值的地址,返回这个最大值的地址;
问题二:可以;
task2.1
问题一:80,sizeof统计的是系统为这个字符数组分配的字节个数总共为N=80个,strlen统计的是字符数组的字符个数包括空格;
问题二:不可以,

编译器说我我试图把一个字符串常量直接赋值给一个char数组,而字符串常量与char数组不能用=赋值;
问题三:交换了,

;
task2.2
问题一:s1存放的是字符串首字母的地址,sizeof计算的是指针变量s1本身占用的内存字节数,strlen统计的是字符串的长度;
问题二:可以,2.2中运用了指针,先是定义了一个指向字符型数据的指针,然后把首字母的地址赋值给指针变量,这样就可以通过指针访问字符串。而2.1只是单纯定义了一个字符型数组,不能先定义后赋值;
问题三:交换的是s1与s2所指向的地址,字符串常量在内存中并没有交换;
task4
问题一:replace的功能是将字符串数组中的old-char变为new-char;
问题二:可以;
task5
1 #include <stdio.h> 2 #define N 80 3 4 char *str_trunc(char *str, char x); 5 6 int main() { 7 char str[N]; 8 char ch; 9 10 while(printf("输入字符串: "), gets(str) != NULL) { 11 printf("输入一个字符: "); 12 ch = getchar(); 13 14 printf("截断处理...\n"); 15 str_trunc(str, ch); // 函数调用 16 17 printf("截断处理后的字符串: %s\n\n", str); 18 getchar(); 19 } 20 21 return 0; 22 } 23 24 // 函数str_trunc定义 25 // 功能: 对字符串作截断处理,把指定字符自第一次出现及其后的字符全部删除, 并返回字符串地址 26 // 待补足... 27 // xxx 28 char *str_trunc(char *str,char x){ 29 int i; 30 for(i=0;*(str+i)!='\0';i++){ 31 if(*(str+i)==x) 32 break; 33 } 34 *(str+i)='\0'; 35 return str; 36 }
截图

问题:去掉之后多组输入就无法正常运行,原因是系统将回车当成了第二次输入的字符串,getchar()的作用就是存放回车;
task6
1 #include <stdio.h> 2 #include <string.h> 3 #define N 5 4 5 int check_id(char *str); // 函数声明 6 7 int main() 8 { 9 char *pid[N] = {"31010120000721656X", 10 "3301061996X0203301", 11 "53010220051126571", 12 "510104199211197977", 13 "53010220051126133Y"}; 14 int i; 15 16 for (i = 0; i < N; ++i) 17 if (check_id(pid[i])) // 函数调用 18 printf("%s\tTrue\n", pid[i]); 19 else 20 printf("%s\tFalse\n", pid[i]); 21 22 return 0; 23 } 24 25 // 函数定义 26 // 功能: 检查指针str指向的身份证号码串形式上是否合法 27 // 形式合法,返回1,否则,返回0 28 int check_id(char *str) { 29 for(int i=0;i<N;i++){ 30 if(strlen(str)!=18) 31 return 0; 32 } 33 for(int j=0;j<18;j++){ 34 if(*(str+j)<'0'||*(str+j)>'9'&&*(str+j)!='X') 35 return 0; 36 } 37 38 for(int i=0;i<N;i++){ 39 for(int j=0;j<17;j++){ 40 if(*(str+j)=='X') 41 return 0; 42 } 43 } 44 return 1; 45 46 }
截图

task7
1 #include <stdio.h> 2 #include <string.h> 3 #define N 80 4 void encoder(char *str, int n); // 函数声明 5 void decoder(char *str, int n); // 函数声明 6 7 int main() { 8 char words[N]; 9 int n; 10 11 printf("输入英文文本: "); 12 gets(words); 13 14 printf("输入n: "); 15 scanf("%d", &n); 16 17 printf("编码后的英文文本: "); 18 encoder(words, n); // 函数调用 19 printf("%s\n", words); 20 21 printf("对编码后的英文文本解码: "); 22 decoder(words, n); // 函数调用 23 printf("%s\n", words); 24 25 return 0; 26 } 27 28 /*函数定义 29 功能:对str指向的字符串进行编码处理 30 编码规则: 31 对于a~z或A~Z之间的字母字符,用其后第n个字符替换; 其它非字母字符,保持不变 32 */ 33 void encoder(char *str, int n) { 34 for(int i=0;i<strlen(str);i++){ 35 if(*(str+i)>='a'&&*(str+i)<='z'){ 36 *(str+i)+=n; 37 38 if(*(str+i)>'z'){ 39 *(str+i)-=26; 40 } 41 } 42 } 43 for(int i=0;i<strlen(str);i++){ 44 if(*(str+i)>='A'&&*(str+i)<='Z'){ 45 *(str+i)+=n; 46 47 if(*(str+i)>'Z'){ 48 *(str+i)-=26; 49 } 50 } 51 } 52 } 53 54 /*函数定义 55 功能:对str指向的字符串进行解码处理 56 解码规则: 57 对于a~z或A~Z之间的字母字符,用其前面第n个字符替换; 其它非字母字符,保持不变 58 */ 59 void decoder(char *str, int n) { 60 for(int i=0;i<strlen(str);i++){ 61 if(*(str+i)>='a'&&*(str+i)<='z'){ 62 *(str+i)-=n; 63 64 if(*(str+i)<'a'){ 65 *(str+i)+=26; 66 } 67 } 68 } 69 for(int i=0;i<strlen(str);i++){ 70 if(*(str+i)>='A'&&*(str+i)<='Z'){ 71 *(str+i)-=n; 72 73 if(*(str+i)<'A'){ 74 *(str+i)+=26; 75 } 76 } 77 } 78 }

task8
1 #include <stdio.h> 2 #include <string.h> 3 #define N 80 4 int main(int argc, char *argv[]) { 5 char *temp; 6 int i,j; 7 for(i = 1; i < argc-1; ++i){ 8 for(j=1;j<argc-i;++j){ 9 if(strcmp(argv[j],argv[j+1])>0){ 10 temp=argv[j]; 11 argv[j]=argv[j+1]; 12 argv[j+1]=temp; 13 } 14 } 15 } 16 for(i = 1; i < argc; ++i) 17 printf("hello, %s\n", argv[i]); 18 19 return 0; 20 }

浙公网安备 33010602011771号