题目要求:
输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。
题目格式:
输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。
输出格式:
在一行中输出逆序后的字符串。
输入样例:
hello world!
输出样例:
!dlroW olleH
代码实现:
void reverseList(char* pa,int i)
{
int left = 0;
int right = i - 1;
while (left < right)
{
char tmp = pa[left];
pa[left] = pa[right];
pa[right] = tmp;
left++;
right--;
}
}
int main()
{
char arr[80] = {0};
int i = 0;
while ((arr[i] = getchar()) != '\n')
{
i++;
}
arr[i] = '\0';
reverseList(arr,i);
printf("%s\n", arr);
return 0;
}
运行效果:
总结:
1、 此道题目不能用scanf进行从键盘键入一个字符串,因为对于scanf,遇见空格或者回车键即停止,举个例子:当我们运用scanf从键盘输入“hello world!”时,打印出来是“hello”。于是我们考虑运用getchar()去读取从键盘输入的字符串,字符串里可以包括空格等。就是利用一个循环,用getchar()去一个一个读取放到数组arr中,直到arr[i]读取到‘\n’,结束循环。记住最关键的一步,就是结束后的时候,将此时的arr[i]赋值为’\0’。
2、 如果你在main()函数中对定义的数组arr不规定大小的话,即char arr[] = { 0 }; ,此项代码运行时会出现栈越界的问题,也就是超过了arr数组规定的界限。