我想解决的问题是:
考虑一组字符。开始扫描每个角色一个 左右两个一个。如果两个扫描的字符都是 然后字母表在数组中交换它们。
示例:
如果数组是
! w , s t u # p a b
,那么我将从中开始扫描 左右两边。即首先我将扫描!
和b
,因为两者都是 不是字母我不会交换。然后我会转到w
和a
,因为 两者都是字母表我会交换它们。我将继续这个过程,直到 我到达阵列的中间。
我的代码:
#include <stdio.h>
#include <ctype.h>
int main() {
int p,q,len,i;
char s[100],temp;
//ask the length of string
printf("Enter the number of chars:\n");
scanf("%d",&len);
//get each char in the string and store in array s[]
printf("Enter %d chars:\n",len);
for(i=0;i<len;i++)
scanf("%c",&s[i]);
//start scanning char by char from both sides
p=0;
q=len-1;
while(p<=q)
{
// swap chars if both p and q points to a letter
if(isalpha(s[p]) && isalpha(s[q]))
{
temp=s[p];
s[p]=s[q];
s[q]=temp;
}
//increment p to move towards right
p++;
//decrement q to move towards left
q--;
}
//print all chars in the array
for(i=0;i<len;i++)
printf("%c",s[i]);
return 0;
}
我的意见
10
!w,stu#pab
我的预期输出:
!a,sut#pwb
我得到的输出:
!w,tsu#pa
为什么输出错误?错误在哪里?
答案 0 :(得分:1)
#include <stdio.h>
#include <ctype.h>
int main() {
int p,q,len,i;
char s[100],temp;
//ask the length of string
printf("Enter the number of chars:\n");
scanf("%d",&len);
//get each char in the string and store in array s[]
printf("Enter %d chars:\n",len);
scanf("%s",&s[i]);
//start scanning char by char from both sides
p=0;
q=len-1;
while(p<=q) {
// swap chars if both p and q points to a letter
if(isalpha(s[p]) && isalpha(s[q])) {
temp=s[p];
s[p]=s[q];
s[q]=temp;
}
//increment p to move towards right
p++;
//decrement q to move towards left
q--;
}
//print all chars in the array
for(i=0;i<len;i++)
printf("%c",s[i]);
return 0;
}