字符串截取请教!

jiahehao 2013-06-04 02:18:04
  一个字符串,结构是:前两个为数字,从第三个起,可能是数字,也可能是字符。最后一个是0xFFAC之类的一个十六进制数字。各个变量间用逗号间隔。请问如何一个个截取出来?  
  例如,它可能是: “5,10,str,0xFFBC”,也有可能是“5,10,100,200,0xFFBC”。
  我想把前两位(因为肯定是数字)存在int型变量中。如果第三位、第四位。。是数字,就也存在int型变量中,否则就存在字符型变量里。另外,如果第三位不是数字,就一定会是字符串"str"。最后一个则肯定是一个十六进制的数字。

  多谢大家赐教!
...全文
277 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiahehao 2013-06-04
  • 打赏
  • 举报
回复
 多谢各位大神,结贴散分~~~~
赵4老师 2013-06-04
  • 打赏
  • 举报
回复
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
    p=s;
    while (1) {
        k=sscanf(p,"%d%n",&v,&n);
        printf("k,v,n=%d,%d,%d\n",k,v,n);
        if (1==k) {
            p+=n;
        } else if (0==k) {
            printf("skip char[%c]\n",p[0]);
            p++;
        } else {//EOF==k
            break;
        }
    }
    printf("End.\n");
}
//k,v,n=1,123,3
//k,v,n=0,123,3
//skip char[ ]
//k,v,n=0,123,3
//skip char[a]
//k,v,n=0,123,3
//skip char[b]
//k,v,n=1,4,2
//k,v,n=-1,4,2
//End.
赵4老师 2013-06-04
  • 打赏
  • 举报
回复
费那事儿! %i Decimal, hexadecimal, or octal integer. Pointer to int.
long L;
sscanf("0xFFBC","%i",&L);
图灵狗 2013-06-04
  • 打赏
  • 举报
回复
用strtol函数进行转换,可以指定16进制。
引用 8 楼 jiahehao 的回复:
还有一个问题,截取到字符串“0xFFAB”后,我怎么将它转化为一个无符号的long型变量?  我试了几个函数,都是返回0.
starytx 2013-06-04
  • 打赏
  • 举报
回复
引用 8 楼 jiahehao 的回复:
还有一个问题,截取到字符串“0xFFAB”后,我怎么将它转化为一个无符号的long型变量?  我试了几个函数,都是返回0.
看6楼我的回复
jiahehao 2013-06-04
  • 打赏
  • 举报
回复
还有一个问题,截取到字符串“0xFFAB”后,我怎么将它转化为一个无符号的long型变量?  我试了几个函数,都是返回0.
图灵狗 2013-06-04
  • 打赏
  • 举报
回复

#include <ctype.h>
#include <stdio.h>

void catch(const char* value)
{
	/* 根据所获取的字符串作相应的动作,这里举例进行简单的打印而已 */
	printf("%s\n", value);
}

void analyze(const char* str)
{
	char value[32];
	char ch;
	int i = 0;

	while(ch = *str++)
	{
		if(ch == ',')
		{
			value[i] = '\0';
			catch(value);
			i = 0;
		}
		else if(isalpha(ch) || isdigit(ch))
		{
			value[i++] = ch;
		}
	}
	value[i] = '\0';
	catch(value);
}

int main(int argc, char* argv[])
{
	analyze("5,10,str,0xFFBC");
	analyze("5,10,100,200,0xFFBC");

	return 0;
}
引用 楼主 jiahehao 的回复:
  一个字符串,结构是:前两个为数字,从第三个起,可能是数字,也可能是字符。最后一个是0xFFAC之类的一个十六进制数字。各个变量间用逗号间隔。请问如何一个个截取出来?     例如,它可能是: “5,10,str,0xFFBC”,也有可能是“5,10,100,200,0xFFBC”。   我想把前两位(因为肯定是数字)存在int型变量中。如果第三位、第四位。。是数字,就也存在int型变量中,否则就存在字符型变量里。另外,如果第三位不是数字,就一定会是字符串"str"。最后一个则肯定是一个十六进制的数字。   多谢大家赐教!
starytx 2013-06-04
  • 打赏
  • 举报
回复
unsigned long convert(const char* pStr)  // 将16进制字符串转换成无符号整形
{ 
    unsigned long var=0; 
    unsigned long t; 
    int len = strlen(pStr);  
    if (len > 8) //最长8位  
        return -1; 
    char *strTemp = new char[len+1];
    char *str = strTemp;
    strncpy(str ,pStr ,len+1);
    strupr(str);//统一大写 
    if (str[0] == '0' && str[1] == 'X')
    {
        str+=2;
    }
    for (; *str; str++) 
    {  
        if (*str>='A' && *str <='F')   
            t = *str-55;//a-f之间的ascii与对应数值相差55如'A'为65,65-55即为A  
        else   
            t = *str-48; 
        var<<=4;  
        var|=t; 
    } 
    delete []strTemp;
    return var;
} 

 int main()
{
    string str("5,100,123,0xFFBC");
    size_t nPos = 0;
    nPos = str.find(",");
    int m = atoi(str.substr(0 ,nPos).c_str());  // 第一个数字
    int n = atoi(str.substr(nPos+1 ,str.find("," ,nPos+1 ) - nPos-1).c_str()); // 第二个数字
    nPos = str.find("," ,nPos+1);
    if (str.substr(nPos+1 ,3) == "str")
    {
        // 是字符串"str"  // 第三个是字符串"str"
    }
    else
    {
        int k = atoi(str.substr(nPos+1 ,str.find("," ,nPos+1 ) - nPos-1).c_str()); //第三个数字
    }
    nPos = str.find("," ,nPos+1);
    int h = convert(str.substr(nPos+1 ).c_str() );  // 最后一个数字
    return 0;
}
bewinged 2013-06-04
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <iostream>

int num = 0;
char *save[30];
int fun(char, int);
int fun(char *a, int len)
{
     char *p;
     p = strtok(a,",");
     if(!p)
           return -1;
     printf("%s\n",p);
     save[num]=p;
     num++;
     while(p = strtok(NULL,",")) {
       save[num]=p;  
       printf("%s\n",p);
       num++;
     }
     return 1;
}
int main(void)
{
    int ret;
    int i = 0;
    int j = 0;
    int k = 0;
    int integer[10];
    char *char_num[10];
    char a[100]="5,10,str,0xFFBC";
    //char a[100]="5,10,100,200,0xFFBC";
    ret = fun(a,100);
    if(ret < 0) {
           printf("数据不对\n");       
    }
    printf("有%d个数据\n",num);
    for(i = 0; i < num; i++){
          if((ret = atoi(save[i]))!=0) {
                  integer[k++] = ret;
                  printf(" 是整数%d\n",integer[k-1]);
          }
          else {
              char_num[j++]=save[i];
              printf("是字符串%s\n",char_num[j-1]);   
           }   
    }
    system("pause");   
    return 0;
}
Carl_CCC 2013-06-04
  • 打赏
  • 举报
回复
#include <stdio.h> #include <string.h> int main() { char input[1024] = {0}; char * substr; printf("Input you string:"); scanf("%s", input); substr = strtok(input, ","); while(substr) { printf("substr:%s\n", substr); // TODO process it. substr = strtok(NULL, ","); } return 0; }
jiahehao 2013-06-04
  • 打赏
  • 举报
回复
 各位可否提供代码,我的代码有段错误。。。。。 char c1[32] ; char c2[16] ; char *q; char * p_i; strcpy(c1, "5,300,str,0xFFAB"); //strcpy(c1, "5,300,500,700,0xFFFA"); //sscanf(c1, "%*d,%*d,%*s,%[^ ]", c2); //printf("c2 is %s.\n", c2);*/ q = c1; p_i = strstr(c1, ","); if (p_i != NULL) { memcpy( c2 , p_i , (q-p_i)); printf("c2 is %s.\n", c2); }
china_ssl 2013-06-04
  • 打赏
  • 举报
回复
写个函数,split然后分割成数组
ouyh12345 2013-06-04
  • 打赏
  • 举报
回复
先用逗号把字符串分开,可以考虑strtok,strchr等函数,c++可以考虑stl::string::find,stl::string::substr 然后判断第三个字符串是否为str

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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