基本C阵列功能

时间:2011-01-27 03:47:18

标签: c arrays header

我是新来的和编程。我需要编写一个函数,以便能够通过所需的输入划分一个句子并单独输出。

如输入为“Hello,How are you ...”,它是23个字符,另一个输入是数字“6”。

因此,我想将其打印为“你好”和“你好吗......”

我认为最好使用数组...但是,我无法编写该函数。我希望有人可以帮助我..

顺便说一句,如果我想将函数放在头文件中,我该如何管理呢。

非常感谢...

2 个答案:

答案 0 :(得分:2)

首先声明split_string函数的头文件。 (由于你是编程新手,我提出了详细的评论):

/* Always begin a header file with the "Include guard" so that
   multiple inclusions of the same header file by different source files
   will not cause "duplicate definition" errors at compile time. */ 
#ifndef _SPLIT_STRING_H_  
#define _SPLIT_STRING_H_

/* Prints the string `s` on two lines by inserting the newline at `split_at`.
void split_string (const char* s, int split_at);

#endif

以下C文件使用split_string

// test.c

#include <stdio.h>
#include <string.h> /* for strlen */
#include <stdlib.h> /* for atoi */
#include "split_string.h"

int main (int argc, char** argv)
{
  /* Pass the first and second commandline arguments to
     split_string. Note that the second argument is converted to an 
     int by passing it to atoi. */
  split_string (argv[1], atoi (argv[2]));
  return 0;
}

void split_string (const char* s, int split_at)
{
  size_t i;
  int j = 0;
  size_t len = strlen (s);

  for (i = 0; i < len; ++i)
    {
      /* If j has reached split_at, print a newline, i.e split the string.
         Otherwise increment j, only if it is >= 0. Thus we can make sure 
         that the newline printed only once by setting j to -1. */
      if (j >= split_at)
        {
          printf ("\n");
          j = -1;
        }
      else 
        {
          if (j >= 0)
            ++j;
        }
      printf ("%c", s[i]);
    }
}

您可以编译并运行该程序(假设您使用的是GNU C编译器):

$ gcc -o test test.c
$ ./test "hello world" 5
hello
 world

答案 1 :(得分:1)

首先,C中的字符串是char *,它已经是char的数组:

char *msg = "Hello, World!";
int i;
for(i=0; i<strlen(msg); ++i)
{
    char c = msg[i];
    // Do something
}

如果要将函数放在头文件中,只需将其定义为inline