迭代C中数组上的字符串

时间:2015-04-15 20:35:56

标签: c arrays string loops character

我有这样的代码:

char* s[4][10] = { "abc\0", "aab\0", "cbb\0" };

想要输入一个字符,比如..' a',并遍历字符串数组,检查每个字符串是否有' a'在它上面,然后算上它有多少......

在这种情况下,我想要的是"abc" : 1"aab" : 2"cbb" : 0 ...... 我该怎么做循环才能得到这个结果?

3 个答案:

答案 0 :(得分:0)

char input = '\0';
scanf("%c", &input);
int i, j;
for(i=0; i<4; i++)
{
    int count = 0;
    for(j=0;j<10;j++)
    {
         if(s[i][j] == input) count++;
    }
    printf("%s : %d", s[i], count);
}

虽然请注意,简单地复制和粘贴不会教你任何东西。

答案 1 :(得分:0)

这是一个演示程序,展示了如何处理不同的数组声明

#include <stdio.h>

int main(void) 
{
    char* s[4][10] = { { "abc", "aab", "cbb" } };

    for ( int i = 0; i < 4; i++ )
    {
        for ( int j = 0; j < 10; j++ )
        {
            if ( s[i][j] )
            {
                size_t count = 0;
                for ( char *p = s[i][j]; *p != '\0'; ++p )
                {
                    if ( *p == 'a' ) ++count;
                }

                printf( "\"%s\": %zu\n", s[i][j], count );
            }
        }
    }

    printf( "\n" );

    char* t[4] = { "abc", "aab", "cbb" };

    for ( char **p = t; *p != NULL; ++p )
    {
        size_t count = 0;

        for ( char *q = *p; *q != '\0'; ++q )
        {
            if ( *q == 'a' ) ++count;
        }

        printf( "\"%s\": %zu\n", *p, count );
    }


    printf( "\n" );

    char u[4][10] = { "abc", "aab", "cbb" };

    for ( int i = 0; i < 4; i++ )
    {
        if ( u[i][0] != '\0' )
        {
            size_t count = 0;
            for ( char *p = u[i]; *p != '\0'; ++p )
            {
                if ( *p == 'a' ) ++count;
            }

            printf( "\"%s\": %zu\n", u[i], count );
        }
    }

    return 0;
}

程序输出

"abc": 1
"aab": 2
"cbb": 0

"abc": 1
"aab": 2
"cbb": 0

"abc": 1
"aab": 2
"cbb": 0

似乎您指的是数组声明的第二个变体或数组声明的第三个变体。第一个变体看起来很奇怪。:)

考虑到字符串文字已包含终止零。所以没有意义写,例如

"abc\0"

简单地写

就足够了
"abc"

由于存在终止零,sizeof( "abc" )等于4。

答案 2 :(得分:0)

#include <stddef.h>
#include <stdio.h>

int main(int argc, char *argv[]) {
    char s[10][4] = { "abc", "aab", "cbb" };
    size_t i;
    for (i = 0; i != sizeof(s) / sizeof(s[0]); i++) {
        fprintf(stdout, "%zu: %s\n", i, s[i]);
    }
    return 0;
}

#include <stddef.h>
#include <stdio.h>

int main(int argc, char *argv[]) {
    char *s[4] = { "abc", "aab", "cbb" };
    size_t i;
    for (i = 0; i != 3; i++) {
        fprintf(stdout, "%zu: %s\n", i, s[i]);
    }
    return 0;
}

请注意原始声明

char* s[4][10] = { "abc\0", "aab\0", "cbb\0" };

有几个错误:

  • char *代替char
  • [4][10]代替[10][4]
  • "abc\0"代替"abc"(尾随'\0'是隐含的)。