0

C で文字列を 1 文字ずつ読み取ろうとしています。文字列クラスがないため、これを支援する関数はありません。これが私がやりたいことです:私は持っています、

char m[80];  //I do some concenation, finally m is:

m= 12;256;2;

今、半列の間に何文字あるかを数えたいと思います。この例では、それぞれ 2、4、1 文字です。どうすればこれを行うことができますか?

ありがとうございました

4

3 に答える 3

2

「これを助ける機能がない」とはどういう意味ですか? がある。文字列を読みたい場合は、関数を調べてくださいfgets

当面の問題について、これがあるとしましょう:

char m[80] = "12;256;2";

そして、セミコロンの間の文字を数えたいとします。最も簡単な方法は、 を使用することstrchrです。

char *p = m;
char *pend = m + strlen(m);
char *plast;
int count;

while( p != NULL ) {
    plast = p;
    p = strchr(p, ';');

    if( p != NULL ) {
        // Found a semi-colon.  Count characters and advance to next char.
        count = p - plast;
        p++;
    } else {
        // Found no semi-colon.  Count characters to the end of the string.
        count = pend - p;
    }

    printf( "Number of characters: %d\n", count );
}
于 2013-04-10T23:13:33.247 に答える
1

文字列を変更してもかまわない場合、最も簡単な方法は を使用することstrtokです。

#include <string.h>
#include <stdio.h>
int main(void) {
    char m[80] = "12;256;2;";
    char *p;

    for (p = strtok(m, ";"); p; p = strtok(NULL, ";"))
        printf("%s = %u\n", p, strlen(p));
}
于 2013-04-10T23:33:37.493 に答える
1

ここにコードを書くべきだったかどうかはわかりませんが、修正してください。しかし...

int strcount, charcount = 0, numcharcount = 0, num_char[10] = 0;  
                                            //10 or how many segments you expect

for (strcount = 0; m[strcount] != '\0'; strcount++) {

    if (m[strcount] == ';') {

         num_char[numcharcount++] = charcount;
         charcount = 0;             

    } else {

         charcount++;

    }

}

これにより、間の各文字の量が;配列に格納されます。ずさんなことは認めますが、あなたが求めたものにはうまくいきます。

于 2013-04-10T23:14:31.630 に答える