我试图在C中逐个字符地读取字符串。由于没有字符串类,因此没有任何函数可以帮助它。这就是我想做的事情:我有,
char m[80]; //I do some concenation, finally m is:
m= 12;256;2;
现在,我想计算半色数之间有多少个字符。在此示例中,分别有2,4和1个字符。怎么办呢?
谢谢
答案 0 :(得分: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 );
}
答案 1 :(得分: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++;
}
}
这将存储数组中;
之间每个字符的数量。
我承认这有点草率,但它会对你提出的问题起作用。
答案 2 :(得分: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));
}