我正在尝试编写一个循环,它将计算输入的单词总数以及给定行上的单词数。总词数是累积的,但是,给定行上的词语不是累积的。如何将这个数字存储在循环之外,以便在下一次迭代中不重新定义?
我的想法是将它们存储到int
数组中,之后只显示数组,但事实证明这比预期的要困难。
这是一个例子:
Hello World
cats and dogs
输出:
5 words total
2 3 //2 on line one and 3 on line two
这就是我到目前为止:
char lines[50];
int numOfLines = 0;
int numOfWords = 0
int i;
int wordsPerLine[50]; //Unused at this point
for(i = 1; i <= 1000; i++){
fgets(lines,50,stdin);
if (strcmp(lines, ".\n") == 0){
break;
}
numOfLines++;
for (i = 0; i < strlen(lines); i++){
if(lines[i] == ' '){
numOfWords++;
wordsPerLine[i] = numOfWords; //everything works up until here
}
}
}
for (i = 0; i < numOfLines; i++){
printf("%d ", wordsPerLine[i]); //trying to print out the array where I'd hope to store them, however I get a bunch of random numbers
}
答案 0 :(得分:2)
以下是您的问题:
i
作为控制变量,因此它会干扰外部循环。为此使用单独的变量(j
)。wordsPerLine[0]
。从0开始此循环。wordsPerLine[i]
设置为当前值numOfWords
,这是总字数。相反,在循环之前将此值设置为0并在每次迭代时增加。完成这些更改后,您的代码应如下所示:
for(i = 0; i <= 1000; i++){
fgets(lines,50,stdin);
if (strcmp(lines, ".\n") == 0){
break;
}
numOfLines++;
wordsPerLine[i] = 0;
for (j = 0; j < strlen(lines); j++){
if(lines[j] == ' ' || lines[j] == '\n'){
numOfWords++;
wordsPerLine[i]++;
}
}
}
编辑:
更改了wordsPerLine
和numOfWords
的管理方式,以便numOfWords
包含外部循环完成时的总字数。
答案 1 :(得分:0)
我发现这个问题是你尝试使用相同的变量i
两次作为两个独立循环的计数器,导致错误的逻辑。
为外部循环使用单独的计数器,例如j
并使用 变量将内部循环外部的wordsPerLine
索引,在外部循环的主体末尾。
答案 2 :(得分:0)
在嵌套for循环中使用不同的计数器并重置numofWords
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tbody id="mergeRowsBody">
<tr class="rowEditData odd mergeSelect" data-value="110461" role="row">
<td class="mdl-data-table__cell--non-numeric sorting_1">ABBEVILLE</td>
<td class="mdl-data-table__cell--non-numeric">South Carolina</td>
<td class="mdl-data-table__cell--non-numeric">null</td>
<td class="mdl-data-table__cell--non-numeric">null</td>
<td class="mdl-data-table__cell--non-numeric">001</td>
<td class="mdl-data-table__cell--non-numeric">39</td>
</tr>
<tr class="rowEditData even mergeSelect" data-value="107045" role="row">
<td class="mdl-data-table__cell--non-numeric sorting_1">Abbeville County</td>
<td class="mdl-data-table__cell--non-numeric">South Carolina</td>
<td class="mdl-data-table__cell--non-numeric">001</td>
<td class="mdl-data-table__cell--non-numeric">45</td>
<td class="mdl-data-table__cell--non-numeric">null</td>
<td class="mdl-data-table__cell--non-numeric">null</td>
</tr>
</tbody>
</table>