2011-01-27 19 views
0

私はここでプログラミングされています。私は、目的の入力を介して文を分割して別々に出力できるようにする関数を書く必要があります。基本的なC配列関数

入力は「こんにちは、元気ですか?」など23文字、その他の入力は数字「6」です。

はこのように、私は「こんにちは」と、それを印刷したいと

私はしかし、私は関数を記述することはできません...それは配列を使用するのがベストだと思う「はどのように...です」。私は誰かが私を助けてくれることを願っています..

ちなみに、私はヘッダーファイルに関数を配置したければ、どうすればそれを管理できますか?

おかげでたくさん... C内のすべての文字列の

+1

ようこそスタックオーバーフロー!以前に試したこと、実行した問題、お手伝いできることについてもう少し詳しく説明できますか? – templatetypedef

+0

希望する出力のより良い例を挙げることはできますか?例えば、 "どう?"新しいラインに乗っていますか?スペースで区切られた引用符付きの文字列が必要なのでしょうか? –

+0

メモリアドレスを取得し、インデックスとオフセットを出力する関数を書く必要があります。 – Buckeye

答えて

1

まず、すでにcharの配列があるchar *です:

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

あなたはヘッダファイルにあなたの関数を入れたい場合は、単にinline

+3

技術的には、 'char *'はcharの配列へのポインタです。 –

+0

'inline'かどうかにかかわらず、コンパイラは最適化設定に応じて自由にそれを行うことができます。 –

+0

少なくとも 'gcc'では、ヘッダファイルに入れたい場合に関数を' inline'として定義しなければなりませんでした。最適化に関するものではありません。 – Elalfer

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 
関連する問題