我是c语言的新手,正在尝试反转字符数组中的元素。实际上,我几乎已经完成了反转,但还有一些问题我无法解决。
以下是代码:
void q2_reverseTheArray(char word[100]){
int lentgh=sizeof(word);
int j;
for(j=length+1; j>=0; j--){
printf("%c", word[j]);
}
这段代码将数组反转,但它添加了另一个字母。
这里有一个可工作的示例:
#include <stdio.h> // printf
#include <stdlib.h> // malloc, free
#include <string.h> // strlen
int main() {
char* s = "hello";
size_t l = strlen(s);
char* r = (char*)malloc((l + 1) * sizeof(char));
r[l] = '\0';
int i;
for(i = 0; i < l; i++) {
r[i] = s[l - 1 - i];
}
printf("normal: %s\n", s);
printf("reverse: %s\n", r);
free(r);
}
你的代码在 length + 1
处出现了错误,应当改为 length - 1
。
同时,你需要注意到结尾的字符 '\0'
。
for(j=length-1; j>=0; j--){
printf("%c", word[j]);
0
到length-1
进行索引。例如,word == "Hello"
length == 5
word[0] == 'H'
word[1] == 'e'
word[2] == 'l'
word[3] == 'l'
word[4] == 'o'
strcpy(word, "Look at Sky")
代替。 - Andrej Adamenko我希望这将是更好的解决方案。
不需要string.h头文件
main()
{
char str1[100], str2[100];
int i, k, j;
scanf("%s", &str1);
for(i=0; str1[i] != '\0'; i++ );
j=i-1;
for(k=0; k<=i; k++)
{
str2[k]=str1[j];
j--;
}
for(k=0; k<i; k++)
printf("%c", str2[k]);
return 0;
}
length
的声明中有一个拼写错误;然后它应该崩溃,因为你通过访问word[length + 1]
来开始循环,而这超出了2个索引范围。 - Arc676for (j=length-1; j>0; j--)
这将从最后一个字符开始重复,直到第一个字符。更好的方法是熟悉使用调试器。 - enhzflep