#include<stdio.h> //应该是getValueByKey int getValueByKey(char *keyValuebuf, char *keybuf, char *valuebuf, int *valuebuflen) { int ret = 0;//-1错误 0未找到 >1成功 int tmplen = 0; int keylen = 0; char* tmpkeybuf; bool found = false; tmpkeybuf = keybuf; int offset;//等号前空格偏移量 //求key的长度 while (*tmpkeybuf != ‘\0‘) { tmpkeybuf++; keylen++; } //[1]寻找等号 do { if (*keyValuebuf == ‘=‘)//判断等号前面的空格 { offset = 0; while (*(keyValuebuf-offset-1)==‘ ‘) { offset++; } //找到了一个=号 //[2]等号左边为key //如果左值和key相等 处理 跳出循环 //如果不相等继续循环 for (int i = 1; i <= keylen; i++) { //指针--移动到上一个字符 再向后移动到等号为止,与keybuf比较 完全相同 //测试时候出现的问题: =前面空格的问题 //比如 name = XX name和等号之间有空格 当输入key为name时 无法匹配 // X 解决方法: keyvalue的临时变量去尾部空格 在计算keylen处理 X不正确 输入的是每空格的 //解决方法,应从keyvalbuf上下手 if (*(keyValuebuf -offset- i) == *(tmpkeybuf - i)) { found = true; continue; } else { found = false; break; } } //[3]等号右边第一个非空格为value(统计长度) if (found) { //找到了 从等号开始向右处理 keyValuebuf++; //3.1trim掉value前面的空格 while (*keyValuebuf == ‘ ‘) { keyValuebuf++; } //3.2开始copy value到valuebuf 并统计长度 遇到空格或回车或\0结束 // ↓↓↓↓↓ Error 原因: &&写成|| 在多条件不等于判断的时候 要任意一个不满足的时候用&& while (*keyValuebuf != ‘ ‘ && *keyValuebuf != ‘\n‘ && *keyValuebuf != ‘\0‘)//err 指针越界挂掉 { *valuebuf++ = *keyValuebuf++;//error! tmplen++; } //Exception ::少个‘\0‘! *valuebuf = ‘\0‘; //3.4ok后 保存数据 return 结束掉函数 *valuebuflen = tmplen; return tmplen; } } keyValuebuf++; } while (*keyValuebuf != ‘\0‘); return tmplen; } int main() { //定义变量 int valuelen; char value[50]; char key[20]; int ret; //获得valuekey字符串 char valueKey[] = "name1 = XXX sex1=女\n age1= 21 \nname2 = XX sex2=男 age2= 21"; //交互 printf("Info String is : %s\n\n",valueKey); do { printf("Input Key : "); scanf("%s", key); ret = getValueByKey(valueKey, key, value, &valuelen); if (ret>0) { printf("\n\t find a Result : [%s] -> %s\n\n",key,value); } else if (ret==0) { printf("Err: Key Not Found ErrCode:%d \n",ret); } else { printf("ErrCode:%d \n", ret); } } while (*key != ‘N‘); return 0; }
时间: 2024-10-05 05:41:27