在数组中找出char的序列

时间:2012-09-21 11:34:53

标签: c

很长一段时间我没有处理过C中的数组。

所以我需要在char的数组中找到多个字符串的序列 实际上我需要它们来解析一些命令行

示例:

char *myArray=" go where:\"here\" when:\"i dont know ...\";

我需要找出app运行时指定的参数是什么 我做了一些功能,但结果很奇怪

void splitString(char *from ,char start ,char end ,char *into)
{
    int size=strlen(from);
    for(int i=0;i<size;i++)
    {
        if(from[i]==start)
        {
            for(int j=i;j<size;j++){
                if(from[j]!=end)
                    into+=from[j];
                else
                    break;
            }
        }
        break;
    }

}

和电话

char *into;
char *from="this is #string# i want to look for ";
splitString(from,'#','#',into);

结果为the following dialog

3 个答案:

答案 0 :(得分:1)

我认为在收到数据时你必须终止成字符串。并将j增加到i + 1

void splitString(char *from ,char start ,char end ,char *into)
{
  int k = 0;
  int size=strlen(from);
  for(int i=0;i<size;i++)
  {
    if(from[i]==start)
    {
        for(int j=i+1, k = 0;j<size;j++, k++){
            if(from[j]!=end)
                into[k]=from[j];
            else
                break;
        }
    }
    break;
}

into[k] = '\0';
}

答案 1 :(得分:0)

您的代码存在三个主要问题。

首先是该行

into+=from[j];

不复制字符,它会增加本地指针。请参阅kTekkie的答案如何解决这个问题。第二个是你没有终止你复制的字符串,这也是kTekkie的答案。

第三个主要问题是你没有为into变量分配内存,所以当你开始正确复制字符时,你将复制到任何into点,这将是一个随机记忆位置。这是未定义的行为,很可能会导致程序崩溃。要解决此问题,请将into创建为类似

的数组
char into[SOME_SIZE];

或使用malloc

在堆上动态分配内存
char *into = malloc(SOME_SIZE);

如果你进行动态分配,请记住free当你不再需要它时分配的内存。

修改:仔细查看该功能......

除了上面在我的回答中描述的问题之外,您的功能还有一些其他问题。一个是你在外部循环中有一个break语句,所以它会立即退出循环。

我实际上会这样写:

void splitString(char *from, char start, char end, char *into)
{
    /* Really first we make sure the output string can be printed by terminating it */
    *into = '\0';

    /* First find the `start` character */
    while (*from && *from++ != start)
        ;

    /* Now we are either at the end of the string, or found the character */
    if (!*from)
        return;  /* At end of string, character not found */

    /* Copy the string while we don't see the `end` character */
    while (*from && *from != end)
        *into++ = *from++;

    /* Now terminate the output string */
    *into = '\0';
}

可以看出here。上一个链接还显示了如何调用它。

答案 2 :(得分:-1)

今天的主题:http://www.cplusplus.com/reference/clibrary/cstring/strtok/

/* strtok example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="- This, a sample string.";
  char * pch;
  printf ("Splitting string \"%s\" into tokens:\n",str);
  pch = strtok (str," ,.-");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok (NULL, " ,.-");
  }
  return 0;
}