- 论坛徽章:
- 0
|
本帖最后由 时间看来 于 2012-05-23 23:47 编辑
第三题:通配符应用,请从给定字符串中找出匹配的单词,*表示多个字符匹配,?表一个字符匹配。(大意如此,记不清函数接口了。只给了这2个库文件)
把自己的代码帖出来……
问题:
1.该怎么分析这个问题呢?可以给个大概思路吗?
我的分析是:有这几种勉强的组合~
*word_ptr: (字母) ( \0 空格) (如果要考虑标点符号的话)
*key_ptr: (?) (*\0) (*字母) (字母)
2.在Linux内核的操作系统上,GDB是否是调试程序的一个好的选择?因为我花了很多时间,感觉不太方便。KDbg好点~
- /*
- *还存在很多bug,但是基本像个样子了。花了很多时间~,特别是用GDB调试。GDB?说什么好呢……
- */
- #include <stdio.h>
- #include <stdlib.h>
- int get_word(const char *word_start);
- void print_word_info(char *word, int len);
- int
- main(int argc, char *argv[])
- {
- int len;
- char source_str[] = "This wil wel is great. I will make it.";
- char *aim_str = "i?";
- my_match(source_str, aim_str);
- return 0;
- }
- /*
- *匹配函数
- */
- void
- my_match(const char *input_str, const char *input_key)
- {
-
- char *word_start;
- char *word_ptr, *key_ptr;
- int word_len,key_len;
- int flag = 0;
-
- word_start = input_str;
- key_ptr = input_key;
- word_ptr = word_start;
- word_len = get_word(word_start);
- key_len = get_word(key_ptr);
- do{
- if(*word_ptr != ' ' && *word_ptr != '\0' \
- && *word_ptr != ',' && *word_ptr != '.'){
- if(*key_ptr == '*' && *(key_ptr+1) =='\0'){
- word_ptr++;
- flag = 1;
- print_word_info(word_start, word_len);
- }else if(*key_ptr == '*' && *(key_ptr+1) !='\0'){
- if(*word_ptr == *(key_ptr+1)){
- key_ptr += 2;
- word_ptr++;
- }else{
- word_ptr++;
- }
- }else if(*key_ptr == '?'){
- key_ptr++;
- word_ptr++;
- }else if(*key_ptr == *word_ptr){
- key_ptr++;
- word_ptr++;
- }else{
- flag = 1;
- }
- }else if(*key_ptr == '*' && *(key_ptr+1) == '\0' || *key_ptr == '\0'){
- flag = 1;
- print_word_info(word_start, word_len);
- }else{
- flag = 1;
- }
-
- if(flag){
- key_ptr = input_key;
- word_start += (word_len + 1);
- word_ptr = word_start;
- word_len = get_word(word_start);
- flag = 0;
- }
- }while(*(word_start - 1) != '\0');
-
- }
- /*
- *得到一个单词末尾位置(from 1)
- */
- int
- get_word(const char *word_start)
- {
- int i;
- char c;
- for(i = 0; (word_start[i] != '\0') && (word_start[i] != ' '); i++)
- ;
- return i;
- }
- /*
- *输出位置和匹配的单词
- */
- void
- print_word_info(char *word, int len)
- {
- int i;
- for(i = 0; i < len; i++){
- putchar(word[i]);
- }
- printf(" ");
- }
复制代码 http://blog.chinaunix.net/uid-25194149-id-3184638.html |
|