输入联想功能是非常实用的一个功能,请编程实现类似功能。要求实现函数:
void auto_complete(char *str, char *tmp,char *output)
【输入】 char *str,候选字符串
char *tmp,输入字符串
【输出】 int *output,联想匹配的字符串
【返回】 无
说明:候选字符串以空格隔开,输入字符串仅从字符串开始处匹配。
将匹配的子字符串输出,同样以空格隔开。如无匹配成功的子字符串,则输出空字符串。
例如:
1)输入:str = chengdu chongqing,tmp = c
输出:output = chengdu Chongqing
2)输入:str = chengdu chongqing,tmp = che
输出:end = Chengdu
3)输入:str = beijing nanjing,tmp = jing
void auto_complete(char *str, char *tmp,char *output)
【输入】 char *str,候选字符串
char *tmp,输入字符串
【输出】 int *output,联想匹配的字符串
【返回】 无
说明:候选字符串以空格隔开,输入字符串仅从字符串开始处匹配。
将匹配的子字符串输出,同样以空格隔开。如无匹配成功的子字符串,则输出空字符串。
例如:
1)输入:str = chengdu chongqing,tmp = c
输出:output = chengdu Chongqing
2)输入:str = chengdu chongqing,tmp = che
输出:end = Chengdu
3)输入:str = beijing nanjing,tmp = jing
输出:end =
解题思路:
1.审好题意;
2.当个单词的提取,循环(下标);
3.判断用flag;
4.符合题意的字符串的复制,输出;
AC代码:
#include<stdio.h>
#include<string.h>
int i,j,k,t=0,flag=1; //定义全局变量,作为下标;
char s1[1000],s2[1000],s3[1000];
void auto_complete(char *str, char *tmp,char *output) //自定义函数 传递指针参数;
{
for(j=0; str[j]!='\0'; )
{
while(str[j]==' ')j++; //从第一个字符开始,消除空格的影响;
k=j; //将单词开始的下标记录下来;
for(i=0; tmp[i]!='\0';) //开始判断单词是否符合题意;
{
flag=1; //flag用于判断中的标记;
if(tmp[i++]!=str[j++])//依次判断是否相等
{
flag=0; // 不一致将标志量置为0,
while(str[j++]!=' ');//判断结束后,置于下个单词的开始,进行下次判断;
break; //跳出循环
}
}
if(flag) //符合题意,将此判断的字符串放入output中
{
for(; str[k]!=' '&&str[k]!='\0';)
output[t++]=str[k++];
output[t++]=' '; //空格分开;
}
}
output[t]='\0'; //puts输出,最后加‘\0';
printf("end="); //最后输出output;
puts(output);
}
int main() //主函数
{
char *x,*y,*z;
x=s1,y=s2,z=s3; //指针初始化
printf("请输入 候选字符串str:");
gets(s1); //录入字符串
printf("请输入 输入字符串tmp:");
gets(s2);
auto_complete(x,y,z); //调用函数
}