实现的目标
利用函数方法查找字符串
e.g 从终端输入字符串“hello Jack,hello jac,hello jacm!”,再在终端输入要查找的语句,如输入“jac”,经过程序的运行,最终输出“jac”出现3次
主要技术
函数方法的声明与实现
1、“接收用户输入”函数的实现
2、“输入”函数的实现
3、“查找”方法的实现
1、“接收用户输入”函数
main函数中的代码块为
#include <stdio.h>
#include "myString.h"
int main() {
char sentence[100] = {};//保存句子
char word[20] = {}; //保存单词
char *sdes = "请输入语句";
char *wdes = "请输入查找的单词";
input(sentence,sdes);
input(word,wdes);
头文件myString.h的声明为
#include <stdio.h>
//接收用户的输入
void input(char *p, char *des);
如下是在查找字符串的cpp文件myString.cpp中的代码块
void input(char *p, char *des){
//提示用户输入
printf("%s:",des);
//输入语句
scanf("%s", p);
}
注:此时会发现运行结果如下
与设想不一致,在输入完“hello world”之后,还未输入要查找的单词,程序就直接结束了;原因:%s 遇到空格或者‘\n’就停止了;
解决方法:1、在cpp文件中写入两个getchar();
分别将空格和'\n'拿走
2、重新定义一个新的方法,实现“输入”函数
2、“输入”函数的实现
cpp文件myString.cpp中的代码块如下
void myScanf(char *p){
int i = 0;//记录当前写到哪一个
while(1){
char c = getchar();//接收用户的一个字符
if(c == '\n'){
p[i] = '\0';
break;
}
p[i] = c;
i++;
}
}
//接收用户的输入
void input(char *p, char *des){
//提示用户输入
printf("%s:",des);
//输入语句
myScanf(p);
}
运行结果如下
3、“查找”方法的实现
main函数中的代码块:
#include <stdio.h>
#include "myString.h"
int main() {
char sentence[100] = {};//保存句子
char word[20] = {}; //保存单词
char *sdes = "请输入语句";
char *wdes = "请输入查找的单词";
input(sentence,sdes);
input(word,wdes);
int count = find(sentence, word);
printf("出现%d次\n",count);
return 0;
}
myString.h中代码块:
#include <stdio.h>
//接收用户的输入
void input(char *p, char *des);
int find(char *sentence,char *word);
myString.cpp中代码块为:
//计算字符串的长度
int length(char *p){
int i = 0;
for(; p[i] != '\0'; i++);
return i;
}
int find(char *sentence,char *word){
//1、获取两个字符串的长度
int sLength = length(sentence);
int wLength = length(word);
//2、判断查询的字符串的长度是否比句子短
if(sLength < wLength){
return 0;
}
//3、
int start = 0;
int count = 0;
for(int i = 0; i < sLength; i++){
//记录当前开始的位置
start = i;
//从当前位置开始去和查找的单词进行比较
int j = 0;
for( ;j <wLength; j++){
//判断j对应的值和start+j对应的值是否相同
if(sentence[start+j] != word[j]){
break;
}
}
//判断怎么出来的
if(j == wLength){
//都相同,将i的值定位到start+j的位置
i = start + j -1;
count++;
}
}
return count;
}
最终结果:
学习心得
经过今天“字符串的查找”这个小项目的实现,有了对利用函数方法将各个功能进行封装更加深刻地理解和认识,通过函数方法的封装,在main函数中只有逻辑性的语句,没有具体的实现语句,在main函数中更能清楚地看出程序要达到的目的,令整个项目逻辑更加清楚;其次,“字符串的查找”中对于“查找”方法的实现中利用两重for循环进行对比“输入字符串”与“查找的字符串”中逻辑比较绕,要多思考。