[ad_1]
「仕立て屋は友人の船長との航海を経験してから船乗りになった」。 上記の文で、次のような 2 次元配列に単語を格納する方法
配列 = {“a”、”仕立て屋”、”ある”、”なる”、”a”、”船乗り”、”その後”、”彼”、”ある”、”経験した”、”a”、”航海” 、「一緒に」、「彼の」、「キャプテン」、「友達」}
私のコードは次のとおりです:
#include <stdio.h> #include <string.h> int main() { char line[1000]; scanf("%[^\n]", line); int l=strlen(line),i,count=0; for(i=0;i<l;i++){ if(line[i]==' '){ count+=1; } } char arr_word[count+1][26]; int j,ind=0; for(i=0;i<count+1;i++){ for(j=0;j<26;j++){ if(line[ind]==' '){ ind++; break; } arr_word[i][j]=line[ind]; ind++; } } return 0; }
私が試したこと:
上記のコードを試してみましたが、各単語の末尾にガベージ値が格納されます。 私を助けてください。
解決策 1
ガベージが表示される理由は、文字列の終端の null 文字を保存していないためです。 NULL 文字を考慮して、文字列の長さよりも 1 文字多い文字を格納する必要があります。
なぜリテラル値 26 を使用するのですか? これはマクロ定義、または C++ の定数値でなければなりません。 リテラル値は、特に複数の場所で使用される場合には避けるべきです。
解決策 4
You need to initialize the arr_word array with a null terminator first because an uninitialized array has the potential to store garbage values. And also, you need to added an additional condition to break the loop when it encounters a null terminator in the sentence ("line" array). This prevents the loop from storing a non-existing character, which could result in the output of a garbage value.
C
#include <stdio.h> #include <string.h> int main() { char line[1000]; scanf("%[^\n]%*c", line); int l=strlen(line),i,count=0; for(i=0;i<l;i++){ if(line[i]==' '){ count+=1; } } char arr_word[count+1][26]; int j,ind=0; /* intialize arr_word array */ for(i=0; i <count+1; i++){ for(j = 0; j <26; j++){ arr_word[i][j] = '\0'; } } for(i=0;i<count+1;i++){ for(j=0;j<26;j++){ if(line[ind]==' ' || line[ind]=='\0'){ ind++; break; } arr_word[i][j]=line[ind]; ind++; } } for(i=0; i <count+1; i++){ for(j = 0; j <26; j++){ printf("%c", arr_word[i][j]); } printf("\n"); } return 0; }
[ad_2]
コメント