在C中按字符读取字符串

时间:2013-04-10 23:03:40

标签: c string

我试图在C中逐个字符地读取字符串。由于没有字符串类,因此没有任何函数可以帮助它。这就是我想做的事情:我有,

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

m= 12;256;2;

现在,我想计算半色数之间有多少个字符。在此示例中,分别有2,4和1个字符。怎么办呢?

谢谢

3 个答案:

答案 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));
}