遍曆文本文件 查找字符串
#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;}#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;}
[解决办法]
// 函数返回一个指针,它指向字符串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 ); }
[解决办法]
#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;}