1

以下のコードでは、ステートメント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]]++;
}
4

4 に答える 4

10
for (i = 0; str1[i] && str2[i];  i++)

と同じです

for (i = 0; (str1[i] != 0) && (str2[i] != 0);  i++)

これはと同じです

for (i = 0; (str1[i] != '\0') && (str2[i] != '\0';  i++)

基本的に、条件ステートメントで式が使用されている場合、値のブール値 (true または false) がチェックされます。それがブール値でない場合 - それが整数型だと言うと、 0 はfalseそれ以外のものですtrue

これは整数型str[i]の- です。charしたがって、str[i] が 0 の場合は false と評価され、それ以外の場合は true と評価されます。

たとえば。

char c = 'A';

if(c)

と同じです

if (c != 0)

これはと同じです

if (c != '\0')

c は 'A' (ASCII では 65) です。65 != 0 であるため、true と評価され、if入力されます。

代わりに、あなたが持っている場合

char c = 0;

また

char c = '\0';

c は 0 と評価されます。したがって、if(c) は false と評価され、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' が発生した回数が含まれます。

カウント配列の各メンバーが0どこかに初期化されている (またはそれらがグローバルである) 場合にのみ機能します。

検討

str1[] = "ABAB";

count[str1[0]]is same as count['A']which is same as count[65](文字セットが ascii の場合)。

これ++により、count['A'] が 1 になります

i1 になると 1になる。 = 2 になると 2 になる。 = 3 になると 2 になる。count[str1[1]]++count['B']icount['A']icount['B']

于 2013-01-01T16:59:19.267 に答える
3

このアルゴリズムは、2 つの文字列内の各 ASCII 文字の出現回数を同時にカウントします。

str1[i] && str2[i]

どちらの文字列の末尾にも到達していないことを確認します。count1[str1[i]]++文字 str1[i] の出現回数を増やします。

于 2013-01-01T17:02:31.503 に答える
2

&& は、文字列ではなく 2 文字に適用されます。この場合、どちらの文字もヌル文字でないことを確認しています。

于 2013-01-01T16:59:09.867 に答える
1

for (i = 0; str1[i] && str2[i]; i++)
文字列の長さが短い回数だけループが実行されます。
'\0' の ASCII 値はゼロ (0) であるため、str1[i]、または str2[i] ゼロは、ゼロとループ終了の両方を意味します。

于 2013-01-01T17:01:55.180 に答える