字符串分段处理

yel617 2010-08-16 06:05:30
在做一个嵌入式web服务器,现在要实现读取html发过来的信息,name1=value1&name2=nalue2&name2=nalue2&name3=nalue3&name4=nalue4&name5=nalue5&name6=nalue6&name7=nalue7&name8=nalue8
现在定义了2个数组,分别存放name和value
char *argName[8];
char *argValue[8];
c = getchar()
可以怎么将c分割,分别存放在这2个数组里啊?
...全文
210 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yel617 2010-08-23
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>

char hexToChar(char *argv)
{
char digit;
digit = (argv[0] >= 'A' ? ((argv[0]&0xdf) - 'A') + 10:(argv[0] - '0'));
digit *= 16;
digit += (argv[1] >= 'A' ? ((argv[1]&0xdf)-'A') +10 :(argv[1] - '0'));
return digit;
}

void unEscapeUrl(char *url)
{
register int i,j;
for(i = 0,j = 0; *(url+j);++i,++j){
if((*(url + i) = *(url + j)) == '%'){
*(url + i) = hexToChar(url + j + 1);
j += 2;
}
}
*(url + i) = '\0';
}

int main( )
{
char url[20];
printf("Please enter a url string\n");
scanf("%s",url);
unEscapeUrl(url);
printf("%s\n",url);
return 0;
}
yel617 2010-08-20
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
char *html = "name1=value1&name2=nalue2&name2=nalue2&name3=nalue3&name4=nalue4&name5=nalue5&name6=nalue6&name7=nalue7&name8=nalue8";
char str[512];
char *argName[8];
char *argValue[8];
char *delim = "&=";
char *tok;
int i;

for (i=0; i<8; i++)
{
argName[i] = malloc(64);
argValue[i]= malloc(64);
}

strcpy(str, html);
tok = strtok(str, delim);
for (i=0; i<8 && tok!=NULL; i++)
{
strcpy(argName[i], tok);
tok = strtok(NULL, delim);
if (tok == NULL)
break;
strcpy(argValue[i], tok);
tok = strtok(NULL, delim);
}

for (i=0; i<8; i++)
{
printf("%d: %s, %s\n", i, argName[i], argValue[i]);
}
for (i=0; i<8; i++)
{
free(argName[i]);
free(argValue[i]);
}
return 0;
}
www549123646 2010-08-20
  • 打赏
  • 举报
回复
感觉有点不对
yzx714 2010-08-17
  • 打赏
  • 举报
回复
重复发帖了吧
daiguoliangfirst 2010-08-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cdbdyx 的回复:]

char *
skip(char **buf, const char *delimiters)
{
char *p, *begin_word, *end_word, *end_delimiters;

begin_word = *buf;
end_word = begin_word + strcspn(begin_word, delimiters);
end_delimiters……
[/Quote]
还是说个思路让他自己写去吧,有问题再来问,思路应该就是二楼的了
wyfwx 2010-08-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 daiguoliangfirst 的回复:]
引用 2 楼 cdbdyx 的回复:

char *
skip(char **buf, const char *delimiters)
{
char *p, *begin_word, *end_word, *end_delimiters;

begin_word = *buf;
end_word = begin_word + strcspn(begin_word, delimite……
[/Quote]

同意,不该让人变懒
充电宝111 2010-08-16
  • 打赏
  • 举报
回复
char *
skip(char **buf, const char *delimiters)
{
char *p, *begin_word, *end_word, *end_delimiters;

begin_word = *buf;
end_word = begin_word + strcspn(begin_word, delimiters);
end_delimiters = end_word + strspn(end_word, delimiters);

for (p = end_word; p < end_delimiters; p++)
*p = '\0';

*buf = end_delimiters;

return (begin_word);
}

void
parse_http_headers(char **buf, struct mg_request_info *ri)
{
int i;

for (i = 0; i < (int) ARRAY_SIZE(ri->http_headers); i++) {
ri->http_headers[i].name = skip(buf, ": ");
ri->http_headers[i].value = skip(buf, "\r\n");
if (ri->http_headers[i].name[0] == '\0')
break;
ri->num_headers = i + 1;
}
}
tankdin 2010-08-16
  • 打赏
  • 举报
回复
一一对应的数据,你定义个结构体数组来存放更合理和整齐。
至于分割,=和&不是都可以做分割标记么,自己写个字符串处理函数就可以了。

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧