如何扫描 N 个字符串(使用结构),然后反向输出该字符串列表?

Posted

技术标签:

【中文标题】如何扫描 N 个字符串(使用结构),然后反向输出该字符串列表?【英文标题】:How do I scan in an N number of strings (using structs) and then output that list of strings in reverse? 【发布时间】:2015-04-15 02:44:39 【问题描述】:

使用下面的特定结构,

struct Student

    char first[50];
    char last[50];
    char id[20];
;

如何扫描 N 个由名字、姓氏和 ID 号组成的字符串,然后向后输出整个列表?

例如:

输入:

3
Dent Arthur 12345ABC
Prefect Ford 54321CBA
McMillan Tricia AB9876

输出:

McMillan Tricia AB9876
Prefect Ford 54321CBA
Dent Arthur 12345ABC  

这是我目前所拥有的

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



struct Student
 
    char first[50];
    char last[50];
    char id[20];
;


int main( )

    int N, i;
    scanf("%d", &N);
    struct Student NAME;

    for(i=0; i<N; i++)
        scanf("%s %s %s", NAME.first[i], NAME.last[i], NAME.id[i]);

    

    /*struct Student prefect;
    scanf("%s %s %s", &prefect.first, &prefect.last, &prefect.id);


    struct Student mcmillan;
    scanf("%s %s %s", &mcmillan.first, &mcmillan.last, &mcmillan.id);*/

    printf("\n");

    printf("%s %s %s\n", NAME.first[i], NAME.last[i], NAME.id[i]);
    printf("%s %s %s\n", NAME.first[i], NAME.last[i], NAME.id[i]);
    printf("%s %s %s\n", NAME.first[i], NAME.last[i], NAME.id[i]);

    return 0;

【问题讨论】:

所以我认为您可以成功地按预期获取输入?我说的对吗? 是的,结果很好。我只是不知道如何输出我在 REVERSE 中输入的任何内容。我不是在谈论字母和一切都是相反的。只是列表 【参考方案1】:

如果要反向打印列表(数组),

for(i=N-1; i>=0; i--)
    printf("%s %s %s\n", NAME.first[i], NAME.last[i], NAME.id[i]);


这解决了逆向问题,尽管代码中还有一个问题。您已将 struct 的成员声明为 string 类型,并且在 main 函数中,您将它们视为字符串数组。这行不通。您可能想要一个结构对象数组。这是如何去做的:

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

struct Student

char first[50];
char last[50];
char id[20];
;


int main( )

int N, i;
scanf("%d", &N);
struct Student NAME[10];

for(i=0; i<N; i++)
    scanf("%s %s %s", NAME[i].first, NAME[i].last, NAME[i].id);



/*struct Student prefect;
scanf("%s %s %s", &prefect.first, &prefect.last, &prefect.id);


struct Student mcmillan;
scanf("%s %s %s", &mcmillan.first, &mcmillan.last, &mcmillan.id);*/

printf("\n");

 for(i=N-1; i>=0; i--)
printf("%s %s %s\n", NAME[i].first, NAME[i].last, NAME[i].id);



return 0;

ideone链接:http://ideone.com/hgPjjn

【讨论】:

我应该再次初始化“i”还是不? 我的程序在我扫描 3 个字符串后崩溃,我不知道出了什么问题。请帮忙【参考方案2】:
suggest modifying the struct to include a 'previous' and 'next' pointers 
and putting the structs into a linked list.
perhaps by malloc'ing the struct instances, as each data becomes available.
linking the malloc'd struct onto the end of the linked list.

then to output,
walk down to the end of the list
then
printing current value,
step to previous list entry,
print value, etc
until back at the head pointer for the list.


could also insert each struct entry at the beginning of
the linked list, 
that would avoid having to walk down the list
to find the last struct, before being able to print 

【讨论】:

【参考方案3】:

您在从控制台跟踪学生时犯了一点错误。首先,对于所有学生,您必须创建一个数组 struct Student-

 struct Student students[100];  

那么你可以像这样从用户那里获取输入 -

for(i=0; i<N; i++)
            scanf("%s %s %s", students[i].first, students[i].last, students[i].id);
        

然后一切都保持不变。当我们编写完整的代码时,它将是 -

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

struct Student
 
    char first[50];
    char last[50];
    char id[20];
;

int main( )

    int N, i;
    scanf("%d", &N);
    struct Student students[100];

    for(i=0; i<N; i++)
        scanf("%s %s %s", students[i].first, students[i].last, students[i].id);
   

    printf("\n");

    for(i=N-1; i>=0; i--)
     printf("%s %s %s\n", students[i].first, students[i].last, students[i].id);
    

    return 0;

【讨论】:

非常感谢razib!看起来我的小错误是我将 [i] 放在 for 循环中【参考方案4】:

这会起作用

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

struct Student 
    char first[50];
    char last[50];
    char id[20];
;

int main() 
    int N, i;
    scanf("%d", &N);
    struct Student NAME[N];
    for (i = 0; i < N; ++i)
        scanf("%s %s %s", NAME[i].first, NAME[i].last, NAME[i].id);
    printf("\n");
    for (i = N - 1; i >= 0; --i)
        printf("%s %s %s\n", NAME[i].first, NAME[i].last, NAME[i].id);
    return 0;

【讨论】:

以上是关于如何扫描 N 个字符串(使用结构),然后反向输出该字符串列表?的主要内容,如果未能解决你的问题,请参考以下文章

神经网络-反向传播BP算法推导

[编程题] 扫描透镜(本题还涉及如何从字符串中提取数字)

2021-05-09

Java基本的程序结构设计 基本类型的输入输出

简单选择排序法

反向传播梯度求解推导