在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"
.
你的第一个代码有问题 -
未初始化的指针 -
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]);
}
}
所以我一直在尝试反转 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"
.
你的第一个代码有问题 -
未初始化的指针 -
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]);
}
}