首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

遍曆文本文件 查找字符串,该如何解决

2012-03-09 
遍曆文本文件 查找字符串C/C++ code#include stdafx.h#include stdlib.h#include string.h#include

遍曆文本文件 查找字符串

C/C++ code
#include "stdafx.h"#include <stdlib.h>#include <string.h>#include <malloc.h>int *  search(char * str, char * subStr){    int *index = NULL;    int i = 0;    int max = 500;    int offset = 0;    int subLen = strlen(subStr);    while(1)    {        if(strstr(str,subStr))  break;        if(i>max)  break;        index = realloc(index, sizeof(int));  // 這塊的內存應該怎麼分配?        index[i++] = strstr(str,subStr);        str = strstr(str,subStr) + subLen -1;    }    return index;}void test(){     char *str = "abcdef";     char *subStr = "abc";     int *p = search(str,subStr);          //printf();  怎麼寫?}int _tmain(int argc, _TCHAR* argv[]){       test();    return 0;}


[解决办法]
C/C++ code
#include <stdlib.h>#include <string.h>#include <malloc.h>#include <stdio.h>int *  search(char * str, char * subStr){    int *index = NULL;    int i = 0;    int max = 500;    int offset = 0;    int subLen = strlen(subStr);    while(1)    {        if(strstr(str,subStr) == 0)  break;        if(i>max)  break;        index = (int *)realloc(index, sizeof(int));  // 這塊的內存應該怎麼分配?        index[i++] = (int)strstr(str,subStr);        str = strstr(str,subStr) + subLen -1;    }    return index;}void test(){     char *str = "abcdef";     char *subStr = "abc";     int *p = search(str,subStr);          printf("%s", *p);}int main(){       test();    return 0;}
[解决办法]


C/C++ code
// 函数返回一个指针,它指向字符串str2 首次出现于字符串str1中的位置,如果没有找到,返回NULL。char* my_strstr( const char* str1, const char* str2 )  {  char* cp = ( char* ) str1;  char* s1, *s2;  // str1 和 str2 副本指针  if( !*str2 ) {  // 如果str2 为空串"",返回 str1指针    return( ( char* )str1 );    }  while( *cp ) {    s1 = cp;    s2 = ( char* ) str2;    while( *s1 && *s2 && !( *s1 - *s2 ) ) {   //s1和s2字符不为'\0',并且相等      s1++, s2++; // 跳到下一个比较,如果s2的都对应上, s2 就能移动到 '\0'      }    if( !*s2 ) { // 如果上面 s2 能移动到 '\0',说明找到了cp      return( cp );      }    cp++; // s2 如果不能移动到 '\0' ,就移动 cp加1    }  return( NULL );  }
[解决办法]
C/C++ code
#include <stdlib.h>#include <string.h>#include <stdio.h>int search(const char* str, const char* subStr){    const char* p = NULL;    p = strstr(str, subStr);    if (p != NULL)        return (p - str);    else        return -1;}int main(){    const char* str = "0123abcdef   abc      xxxabcdef   ";    const char* subStr = "abc";    int ix = 0;    int p = search(str + ix, subStr);    while (p != -1) {        printf("Index: [%d , %d]\n", ix + p, ix + p + strlen(subStr));        ix += (p + strlen(subStr));        p = search(str + ix, subStr);    }    return 0;} 

热点排行