krr*_*hna 1 c syntax boolean-logic and-operator
在下面的代码中,语句str1[i] && str2[i];
和count1[str1[i]]++;
做什么呢?
char str1[4]="rate";
char str2[4]="tear";
int count1[256] ;
int count2[256] ;
int i=0;
for (i = 0; str1[i] && str2[i]; i++)
{
count1[str1[i]]++;//count1['g']++what does that mean ?
count2[str2[i]]++;
}
Run Code Online (Sandbox Code Playgroud)
use*_*353 10
for (i = 0; str1[i] && str2[i]; i++)
Run Code Online (Sandbox Code Playgroud)
是相同的
for (i = 0; (str1[i] != 0) && (str2[i] != 0); i++)
Run Code Online (Sandbox Code Playgroud)
这是一样的
for (i = 0; (str1[i] != '\0') && (str2[i] != '\0'; i++)
Run Code Online (Sandbox Code Playgroud)
基本上,如果在条件语句中使用任何表达式,则检查该值是否为boolean - true或false.如果它不是布尔值 - 说它是一个整数类型,那么0就是false
其他任何东西true
.
这str[i]
是一个char
- 这是一个整体类型.因此,如果str [i]为0,则其计算结果为false,否则计算结果为true.
例如.
char c = 'A';
if(c)
Run Code Online (Sandbox Code Playgroud)
是相同的
if (c != 0)
Run Code Online (Sandbox Code Playgroud)
这是一样的
if (c != '\0')
Run Code Online (Sandbox Code Playgroud)
c是'A'(在ascii中是65).65!= 0,因此它评估为真并且if
将输入.
如果相反,你有
char c = 0;
Run Code Online (Sandbox Code Playgroud)
要么
char c = '\0';
Run Code Online (Sandbox Code Playgroud)
然后c计算结果为0.因此,如果(c)计算结果为假,则不输入if.
你可以将相同的逻辑扩展到str [i],这是一个char
.
如果你有str1[]="rate"
,它就是一样的
str1[0] = 'r', str1[1] = 'a', str1[2] = 't', str1[3] = 'e', str1[4] = 0
.
有关 count1[str1[i]]++;
这是每个角色出现次数的计数 - 例如.如果char集是ascii,那么在字符串遍历结束时,count ['A'](与count [65]相同)将包含字符串中出现'A'的次数.
只有当count数组的每个成员初始化到0
某个地方(或者它们是全局的)时,它才会起作用.
考虑
str1[] = "ABAB";
Run Code Online (Sandbox Code Playgroud)
count[str1[0]]
是一样的count['A']
,其是相同count[65]
(如果字符集是ASCII).
这++
将使计数['A']变为1
当i
变为1时,count[str1[1]]++
使得count['B']
变为1.
i
= 2,然后count['A']
变为2.
i
= 3,然后count['B']
变为2.
归档时间: |
|
查看次数: |
851 次 |
最近记录: |