C で文字列を 1 文字ずつ読み取ろうとしています。文字列クラスがないため、これを支援する関数はありません。これが私がやりたいことです:私は持っています、
char m[80]; //I do some concenation, finally m is:
m= 12;256;2;
今、半列の間に何文字あるかを数えたいと思います。この例では、それぞれ 2、4、1 文字です。どうすればこれを行うことができますか?
ありがとうございました
「これを助ける機能がない」とはどういう意味ですか? がある。文字列を読みたい場合は、関数を調べてください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 );
}
文字列を変更してもかまわない場合、最も簡単な方法は を使用すること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));
}
ここにコードを書くべきだったかどうかはわかりませんが、修正してください。しかし...
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++;
}
}
これにより、間の各文字の量が;
配列に格納されます。ずさんなことは認めますが、あなたが求めたものにはうまくいきます。