繁体   English   中英

在C中获取具有动态长度的字符串的一部分

[英]Get part of a string with dynamic length in C

我从用户那里得到了以下字符串:char * abc =“ a234bc567d”; 但是所有数字的长度都可以与此示例不同(字母为常数)。 如何获得数字的每个部分? (同样,它可以是234或23743或其他。)

我尝试使用strchr和strncpy,但是我需要为此分配内存(用于strncpy),我希望有更好的解决方案。

谢谢。

您可以执行以下操作:

char *abc = "a234bc567d";
char *ptr = abc; // point to start of abc

// While not at the end of the string
while (*ptr != '\0') 
{
  //  If position is the start of a number
  if (isdigit(*ptr))
  {
    // Get value (assuming base 10), store end position of number in ptr
    int value = strtol(ptr, &ptr, 10); 

    printf("Found value %d\n", value);
  }
  else
  {
    ptr++; // Increase pointer
  }
}

如果我理解您的问题,则您正在尝试提取包含数字的用户输入部分...并且数字序列可以是可变的...但字母是固定的,即a或b或c或d。 正确...? 以下程序可能会为您提供帮助。 我尝试将其用于字符串“ a234bc567d”,“ a23743bc567d”和“ a23743bc5672344d”。 作品...

int main()
{
        char *sUser = "a234bc567d";
        //char *sUser = "a23743bc567d";
        //char *sUser = "a23743bc5672344d";

        int iLen = strlen(sUser);
        char *sInput = (char *)malloc((iLen+1) * sizeof(char));

        strcpy(sInput, sUser);
        char *sSeparator = "abcd";
        char *pToken = strtok(sInput, sSeparator);

        while(1)
        {
                if(pToken == NULL)
                        break;

                printf("Token = %s\n", pToken);

                pToken = strtok(NULL, sSeparator);
        }  
        return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM