C语言:字符数组与字符串处理 实践 1
来源:互联网 发布:海王星炒股软件下载 编辑:程序博客网 时间:2024/05/23 00:07
任务代码:
【项目1-M$pszi$y是嘛意思?】
背景:小明让同学传纸条给小丽。小丽接到会心一笑,大家却不知所云。纸条上写着M$pszi$y,两人暗中约定是,真实字符为实际字符前面的第4个!M$pszi$y是神马意思?推算一下,或从ASCII码表中查一下,自然是I love u。
(1)小明请你写一个程序,在给小丽写情书时,再不用费功夫自己“翻译”,原信中每一个字符加密为其后的第4个字符。例,输入I love u,输出M$pszi$y。
(2)小丽请你写一个程序,在看小明的情书时,让程序帮着“解密”。因为有同学知道了他们俩人的“加密”手段,决定纸条由人传,加密数字(1-9)用两人约好的手势传,所以解密时,需要将加密数字作为程序输入。例,输入M$pszi$y(回车)4,输出I love u
(3)小刚常帮着传纸条,想知道俩人的秘密,但不知道加密数字,于是写了一个程序,可以列出所有可能的情况。例,输入M$pszi$y,多行输出中必然有一行是I love u。你就是小刚,写出这个程序来吧。
执行情况:
(1)
#include <stdio.h>int main(){ char str1[50],str2[50]; printf("请输入原句:"); gets(str1); //Encryption int i=0,j=0; while(str1[i]!='\0') { str2[j]=str1[i]+4; j++; i++; } //output printf("加密后的字符串是:"); puts(str2); return 0;}
#include<stdio.h> int main() { char s[80], t[80]; int i; gets(s); for(i=0; s[i]!='\0'; i++) { t[i] = s[i]+4; } t[i] = '\0'; //此时i为? printf("%s\n", t); return 0; }
(2)
#include <stdio.h>int main(){ char str1[50],str2[50]; printf("请输入你想要的解密的语句:"); gets(str1); //decrypt int i,j=0; for(i=0;str1[i]!='\0';i++) { str2[j++]=str1[i]-4; } //output printf("输出解密后的语句:"); puts(str2); return 0;}
答案写法:
#include<stdio.h> int main() { char s[80], t[80]; int i, n; printf("输入待解密句子:"); gets(s); printf("输入加密数字:"); scanf("%d", &n); char *pt = t; //指针法访问数组 for(i=0; *(s+i)!='\0'; i++,pt++) //指针法访问数组 { *pt = s[i]-n; } *pt = '\0'; printf("%s\n", t); return 0; }
(3)
#include<stdio.h>void decrypt(char [],char [],int);int main(){ char s[80], t[80]; int num; printf("输入待解密句子:"); gets(s); //decrypt for(num=0;num<10;num++) { decrypt(s,t,num); printf("第%d种解密:%s\n", num+1,t); } return 0;}void decrypt(char *s,char *t,int num){ char *pt = t; int i; for(i=0; *(s+i)!='\0'; i++,pt++) { *pt = s[i]-num; } *pt = '\0';}
或者子方程可以改成(*s ,*t 已经是指向数组的指针):
void decrypt(char *s,char *t,int num){ int i; for(i=0; *(s+i)!='\0'; i++) { *(t+i)= s[i]-num; } *(t+i)= '\0';}
答案写法:
#include<stdio.h> int main() { char s[80], t[80], *pt; int i, n; printf("输入待解密句子:"); gets(s); for(n=1; n<9; n++) { pt = t; for(i=0; *(s+i)!='\0'; i++,pt++) { *pt = s[i]-n; } *pt = '\0'; printf("%s\n", t); } return 0; }
【项目2-字符统计】
下面的程序可以统计出一个字符串中数字字符的个数:
#include <stdio.h>int main(){ char str[50]; int i=0,n=0; printf("输入字符串:"); gets(str); while(str[i]!='\0') { if(str[i]>='0'&&str[i]<='9') n++; i++; } printf("其中的数字个数是: %d\n", n); return 0; }
请分别编制程序,完成下面的处理:
(1)统计字母'A'出现的次数;
(2)统计字符串中(大/小写)字母个数;
(3)统计每一个元音字母个数
(4)统计每一个数字字符出现的次数;
提示:可以定义一个数组int a[10],保存’0’-’9’在字符串中出现的次数(例a[0]表示字符’0’的个数)
(5)统计每一个字母出现的个数
#include <stdio.h>#include <ctype.h>int Anum(char *);//统计A的个数void BSletter(char *);//统计大小写字母的个数void VowelNum(char *);//统计每个元音字母的个数void NumCount(char []);//统计每个数字字符的个数void alphaCount(char []);//统计每个字符出现的个数int main(){ char str[50]; int i=0,n=0; printf("输入字符串:"); gets(str); while(str[i]!='\0') { if(str[i]>='0'&&str[i]<='9') n++; i++; } printf("其中的数字个数是: %d\n", n); //统计A的个数 int num; num=Anum(str); printf("其中A出现的次数是%d。\n",num); //统计大小写字母的个数 BSletter(str); //统计每一个元音字母 VowelNum(str); //统计数字字符的个数 NumCount(str); //统计每个字母出现的个数 alphaCount(str); return 0; }int Anum(char *s){ int i,num=0; for(i=0;*(s+i)!='\0';i++) { if(*(s+i)=='A') num++; } return num;}void BSletter(char *s){ int i,lowernum=0,uppernum=0; for(i=0;*(s+i)!='\0';i++) { if(islower(*(s+i))) lowernum++; if(isupper(*(s+i))) uppernum++; } printf("大写字母个数:%d\n",uppernum); printf("小写字母个数:%d\n",lowernum);}void VowelNum(char *s){ int i; char str[50];//用于装全部转换为小写字母字符串 int VowelNum[5]={0};//设置一个数组来装元音字母,a,e,i,o,u; for(i=0;*(s+i)!='\0';i++) { str[i]=tolower(*(s+i));//全部转换为小写字母 } //统计 int j; for(j=0;j<i;j++) { if(str[j]-'a'==0) VowelNum[0]+=1; else if(str[j]-'e'==0) VowelNum[1]+=1; else if(str[j]-'i'==0) VowelNum[2]+=1; else if(str[j]-'o'==0) VowelNum[3]+=1; else if(str[j]-'u'==0) VowelNum[4]+=1; } printf("字符串中总共有a,e,i,o,u元音字母个数分别是:%d,%d,%d,%d,%d\n",VowelNum[0],VowelNum[1],VowelNum[2],VowelNum[3],VowelNum[4]); }void NumCount(char s[]){ int num[10]={0},i;//注意这里的初始化很重要 for(i=0;s[i]!='\0';i++) { if(s[i]>='0' && s[i] <= '9' ) { num[s[i]-'0']++;//使用技巧动态分配数组在数组中的储存 } } printf("每个数字的个数分别是:\n"); int j=0; while(j<10) { printf("\'%d\'---%d\n",j,num[j]);//双引号中的单引号是 \' j++; } printf("\n");}void alphaCount(char s[]){ int Upletter[26]={0},Lowerletter[26]={0},i;//注意这里的初始化很重要 for(i=0;s[i]!='\0';i++) { if(s[i]>'a' && s[i] <= 'z' ) { Lowerletter[s[i]-'a']++;//动态储存小写字母 } else if(s[i]>'A' && s[i]<='Z') { Upletter[s[i]-'A']++;//动态储存大写字母 } } //output printf("小写字母部分:\n"); int m=0,n=0; while(m<26) { if(Lowerletter[m]!=0) printf("\'%c\'---%d\n",(char)(m+97),Lowerletter[m]);//方法1 表示 m++; } printf("\n"); printf("大写字母部分:\n"); while(n<26) { if(Upletter[n]!=0) printf("\'%c\'---%d\n",n+'A',Upletter[n]);//方式2 表达 n++; }}
【项目3-字符串复制】
下面的程序,将str1中除空格外的所有字符,复制到了str2中。
#include <stdio.h>#include <string.h>int main(){ char str1[100]="I am a happy boy\'s daddy.",str2[100]; int i=0,j=0; while(str1[i]!='\0') { if(str1[i]!=' ') { str2[j]=str1[i]; j++; } i++; } str2[j]='\0';//切记!! printf("去除空格后的字符串: %s\n", str2); return 0;}请分别编制程序,完成下面的处理:
(1)完整复制字符串;
(2)将str1和str2接起来存放到str3中;
(3)去除str4中的空格,仍保存在str4中;(str4字符串和str1一样)
(4)将str1和str2连接起来,仍存放在str1中;
自己的代码:
#include <stdio.h>#include <string.h>int main(){ char str1[100]="I am a happy boy\'s daddy.",str2[100]; //字符串复制 strcpy(str2, str1); printf("复制后的str2中的字符串是:%s\n",str2); //字符串连结 char str3[100]; strcat(str1, str2);//将str1连结到str2后面,返回str1 strcpy(str3,str1); printf("连结后存储在str3中的字符串是:%s\n",str3); //去除str4中的空格,仍保存在str4中; char str4[100]="I am a happy boy\'s daddy."; int i=0; while(str4[i]!='\0') { if(str4[i]==' ') str4[i]=str4[i+1]; i++; } printf("去掉空格后的str4是:%s\n",str4); //将str1和str2连接起来,仍存放在str1中; strcat(str1, str2); printf("将str1和str2链接起来后任然存在str1中:%s\n",str1); return 0;}
答案代码:
(1)
#include <stdio.h> int main() { char str1[100]="I am a happy boy\'s daddy.",str2[100]; int i,j; for(i=0,j=0; str1[i]!='\0'; i++) { str2[j]=str1[i]; ++j; } str2[j]='\0';//切记!! printf("复制后的字符串: %s\n", str2); return 0; }
#include <stdio.h> int main() { char str1[100]="I am a happy boy\'s daddy.",str2[100]; int i=0,j=0; while((str2[j++]=str1[i++])!='\0');//如此表达式!循环体为空,自左向右运算 printf("复制后的字符串: %s\n", str2); return 0; }
(2)
#include <stdio.h> int main() { char str1[20]= {"int i,a[100];"}; char str2[20]= {"//注释: 定义变量"}; char str3[40]; int i=0,j=0; while(str1[j]!='\0') //复制str1 { str3[i++]=str1[j++]; } j=0; //下面复制str2 while(str2[j]!='\0') { str3[i++]=str2[j++]; } str3[i]='\0'; //一定要保证str3中有'\0' printf("处理后的字符串是: %s\n", str3); return 0; }
(3)
#include <stdio.h> int main() { char str[40]= {"I am a boy."}; int i=0,j=0; while(str[j]!='\0') //找到str的结束 { if(str[j]!=' ') str[i++]=str[j++]; //如果str[i]不是空格,将复制 else j++; //str[j]为空格时,没有进行复制 //j++而没有i++,所以只要有空格,j的值一定会大于i的 //不管是否有空格,j一直勇往直前,i则遇空格就休息 } str[i]='\0'; //str[i]处是复制结束后的位置 printf("处理后的字符串是: %s\n", str); return 0; }
(4)
#include <stdio.h> int main() { char str1[40]= {"I am a boy."}; char str2[20]= {"//注释: 废话一句"}; int i=0,j=0; while(str1[i]!='\0') //找到str1的结束 { i++; } j=0; //下面复制str2 while(str2[j]!='\0') { str1[i++]=str2[j++]; } str1[i]='\0'; //一定要保证str1中有'\0' printf("处理后的字符串是: %s\n", str1); return 0; }
- C语言:字符数组与字符串处理 实践 1
- C语言:字符数组与字符串处理 实践 2
- 《C语言及程序设计》实践项目——字符数组与字符串处理
- c语言中的字符数组与字符串
- c语言中的字符数组与字符串
- c语言中字符串与字符数组
- c语言中的字符数组与字符串
- c语言 字符数组 与 字符串
- C语言中的字符数组与字符串
- c语言中的字符数组与字符串
- c语言中的字符数组与字符串
- c语言中的字符数组与字符串
- C语言字符数组与字符串简介
- C语言中的字符数组与字符串
- 《C语言及程序设计》程序阅读——字符数组与字符串处理
- 《C语言及程序设计》程序填空——字符数组与字符串处理
- c语言中 字符数组与字符串字面值 字符数组与字符指针数组
- C-027.c语言中字符串与字符数组
- CNN 模型压缩与加速算法综述
- django 设置session过期时间
- C#入门基础
- 解释器模式
- @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
- C语言:字符数组与字符串处理 实践 1
- 通过Feign调用的方法实现接口之间的传递
- python里函数定义的理解
- Python实用黑科技——找出序列里面出现次数最多的元素
- Java中字符串中子串的查找——indexOf的用法
- Android简单UI界面的XML实现
- SpringMVC--数据转换、格式化和校验
- jquery+struts实现前台分页
- Pointers on C——10 Structures and Unions.5