在c中反转字符串数组的两种不同方法

Two different methods for reversing an array of strings in c

所以我一直在尝试反转 c 中的字符串数组,我的第一个方法 return 是一个分段错误:

#include <stdio.h>

int main()
{
    char *states[100], *temp[100];
    int i,j=0,n;
    printf("no of states");
    scanf("%d",&j);
    n=j;
    printf("enter the states");
    for (i=0;i<j;i++){
        scanf("%s",&states[i]);
    }
    for (i=0;i<j;i++){
        printf("%s",states[i]);
    }
    for (i=0;i<j;i++){
        for(j=n-1;j>i;j--){
            temp[i]=states[i];
            states[i]=states[j];
            states[j]=temp[i];

        }
    }

}

我的第二次尝试导致数组类型错误的赋值

typedef struct states
{
    char states[100];
}states;

main()
{
    states st[2],temp[2];
    int i,j,n;
    printf("Enter the number of states");
    scanf("%d",&j);
    n=j;
    printf("Enter the states");
    for(i=0;i<j;i++){
        scanf("%s",st[i].states);
    }
    for(i=0;i<j;i++){
        for(n=j;n<i;n--){
            temp[i].states=st[i].states;
            st[i].states=st[n].states;
            st[n].states=temp[i].states;
        }
    }
}

我的想法是接受三种状态。例如 "Texas,Illinois,Oregon" 然后 return "Oregon,Illinois,Texas".

你的第一个代码有问题 -

  1. 未初始化的指针 -

    char *states[100], *temp[100];
    

2.This scanf-

 scanf("%s",&states[i]);
            ^not required 

现在正确的解决方案是 -

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
 {
      char *states[100], *temp[100];
      int i,j=0,n;
      printf("no of states");
      scanf("%d",&j);
       n=j;
      printf("enter the states\n");
     for (i=0;i<j;i++){
          states[i]=malloc(100);         //allocating memory to pointer 
          scanf("%99s",states[i]);
     }

    for(i=0,j=n-1;i<j;j--,i++){

        temp[i]=malloc(100);                   // allocating memory to pointer
        strcpy(temp[i],states[i]);               //swapping the strings
        strcpy(states[i],states[j]); 
        strcpy(states[j],temp[i]);

   }
     j=n;               //set j=n 
    for (i=0;i<j;i++){
             printf("%s\n",states[i]);
             free(states[i]);                 //free allocated memory
             free(temp[i]);                   //free memory
     }

    return 0;
}

你的代码错误较多,请正确理解string & char的概念。

以下是您的问题的工作代码。

#include<stdio.h>
typedef struct states
{
    char states[100];
}states;

main()
{
    int i,n;
    printf("Enter the number of states");
    scanf("%d",&n);
    states st[n],temp;
    printf("Enter the states");
    for(i=0;i<n;i++){
        scanf("%s",st[i].states);
    }
    for(i=0;i<n/2;i++){
        temp=st[i];
        st[i]=st[n-i-1];
        st[n-i-1]=temp;
    }
    for(i=0;i<n;i++){
        printf("%s",st[i].states);
    }
}

我参与了你的第一次尝试。

要反转字符串,逻辑非常简单,我们只需像代码中一样从后面为 temp 赋值。使用 strcpy 复制字符串而不是 =.

#include <stdio.h>
#include<string.h>
int main()
{
    char states[20][20],temp[20][20];//Taking maximum 20 states
    int i,j=0,n;
    printf("no of states");
    scanf("%d",&j);
    n=j;
    printf("enter the states");
    for (i=0;i<j;i++){
        scanf("%s",states[i]);
    }
    for (i=0;i<j;i++){
        printf("%s,",states[i]);
    }

    //Reversing the states
    for (i=0;i<j;i++){
        strcpy(temp[n-i-1],states[i]);
    }
    for (i=0;i<j;i++){
        strcpy(states[i],temp[i]);
    }

    printf("\nReversed States: ");
    for (i=0;i<j;i++){
        printf("%s,",states[i]);
    }

}