交换数组中的元素时输出错误

时间:2017-04-04 04:38:12

标签: c arrays

  

我想解决的问题是:

     

考虑一组字符。开始扫描每个角色一个   左右两个一个。如果两个扫描的字符都是   然后字母表在数组中交换它们。

     

示例:

     

如果数组是! w , s t u # p a b,那么我将从中开始扫描   左右两边。即首先我将扫描!b,因为两者都是   不是字母我不会交换。然后我会转到wa,因为   两者都是字母表我会交换它们。我将继续这个过程,直到   我到达阵列的中间。

我的代码:

#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

为什么输出错误?错误在哪里?

1 个答案:

答案 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;
}