我已经与Python进行了编码,大约一年了,并且决定也学习C。我试图编写一个函数,以通过行(k& r)扭转给定的字符阵列。这是代码:
void reverse(char s[]) {
int i, lastIndex, tempLetter1, tempLetter2;
i = lastIndex = 0;
while (s[lastIndex] != EOF) {
while (s[lastIndex] != 'n') {
i = lastIndex;
tempLetter2 = s[i];
while (s[i] != 'n') {
tempLetter1 = tempLetter2;
tempLetter2 = s[i + 1];
s[i + 1] = tempLetter1;
++i;
}
++lastIndex;
}
++lastIndex;
}
}
这最终以无限的循环结束。我在第二个循环中插入了一些打印代码:
printf("s[0] = ");
putchar(s[0]);
printf("ns[1] = ");
putchar(s[1]);
printf("ns[2] = ");
putchar(s[2]);
它们都包含输入数组的第一个字符(Hello World
)。
s[0] = H
s[1] = H
s[2] = H
我也省略了第一个循环时,但仍然没有起作用。尽管索引在循环外工作正常。第三个循环也有效。
,我将整个代码放在了它的其他方面,如果指出的话,我会很感激:)
#include <stdio.h>
#define LEN 1000
void getLine(char[]);
void reverse(char[]);
int main() {
char line[LEN];
getLine(line);
reverse(line);
printf("n%sn", line);
return 0;
}
void getLine(char s[]) {
int i, c;
for (i = 0; (c = getchar()) != EOF; ++i) {
s[i] = c;
}
s[i] = ' ';
}
您的代码从
开始while (s[lastIndex] != EOF) {
鉴于这里没有文件阅读,因此EOF
(文件结尾)是不正确的。您的意思是0
,这意味着字符串的结尾吗?还是更好的是,' '
表示字符形式的终止?(也称为NUL
,但没有定义该符号。)
好吧,假设s
的第一个字符不是EOF
,则立即进入第二个循环:
while (s[lastIndex] != 'n') {
第一件事:不再检查NUL
。如果您击中NUL
,它将直接驶过它...但是假设输入字符串是构成良好的,并且最终NUL
之前的最后一个字符是'n'
,让我们继续前进。
我理解,您想扭转主字符串中每一行中的字符。这意味着您需要记住行的开头(好的,这是在lastIndex
中 - 对名字的可惜),然后去寻找行的结尾。您正在使用i
...
坚持下:您随身携带角色吗?当然,您应该寻找行的末端,然后开始移动lastIndex
,然后将i
靠近,彼此靠近,随着您而交换?因此,您应该在同一环路内部递增 lastIndex
时降低 i
。
还是我错过了什么?