我有这样的代码:
char* s[4][10] = { "abc\0", "aab\0", "cbb\0" };
想要输入一个字符,比如..' a',并遍历字符串数组,检查每个字符串是否有' a'在它上面,然后算上它有多少......
在这种情况下,我想要的是"abc" : 1
,"aab" : 2
,"cbb" : 0
......
我该怎么做循环才能得到这个结果?
答案 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'
是隐含的)。