首页 > 代码库 > 字符串分割到二维字符数组中:

字符串分割到二维字符数组中:

/*
 *字符串分割,把一个长的字符串(可能有空格),分割到一个二维字符数组中。
 *并且输出
 *
 *时间复杂度O(N)
 *注意在操作二维字符串数组时:使用“数组指针”操作能方便 int(*p)[LEN];
 *
 */

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<stdbool.h>
#define NDEBUG
#include<assert.h>

#define  STR_SIZE 1000  // 输入字符串长度
#define  STR_LEN  50    //分割字符串最大长度
#define  STR_CNT  50    //分割字符串最大数量


int str_split(char *in_str,char (*out_str)[STR_LEN]);
bool is_space(char temp);
void str_cpy(char *src_begin,char *src_end,char *dst);

int main(void)
{
   char  in_str[STR_SIZE];
   char  out_str[STR_CNT][STR_LEN];
   int i=0;
   int count;
   char (*out)[STR_LEN]=out_str;
   gets(in_str);
   count=str_split(in_str,out_str);
   while(i<count)
   {
      printf("%s\n",out[i]);
      i++;
   }
   return 0;
}
bool is_space(char temp)
{
   if(temp==' '||temp=='\n'||temp=='\t'||temp=='\v')
     return true;
   else
    return false;  
}

//使用指针数组把二维数组传递进去方便操作
int str_split(char *in_str,char (*out_str)[STR_LEN])
{
      char *temp_in_str;
      int  count=0;
      assert(in_str!=NULL&&out_str!=NULL);
      while(in_str!='\0')
      {
         while(is_space(*in_str))
          in_str++;
         if(*in_str=='\0')break;
         
          temp_in_str=in_str;
          while((*in_str!='\0')&&(!is_space(*in_str)))
          {
             in_str++;
          }
          str_cpy(temp_in_str,in_str,out_str[count++]);
      }
    return count;  
}

void str_cpy(char *src_begin,char *src_end,char *dst)
{
   assert((src_begin!=NULL)&&(src_end!=NULL)&&(dst!=NULL));
    while(src_begin!=src_end)
      *dst++=*src_begin++;
    *dst='\0';
    return;
}

程序运行结果:

[trageday@lei-yum code_test]$ gcc   -o string_cat string_cat.c
/tmp/ccW8eX4y.o: In function `main':
string_cat.c:(.text+0x2d): warning: the `gets' function is dangerous and should not be used.
[trageday@lei-yum code_test]$ ./string_cat 
  dsdd dda grgr hth jjyjyjyjj   ththt
dsdd
dda
grgr
hth
jjyjyjyjj
ththt



字符串分割到二维字符数组中: