扫描C中的每个测试用例的字符串输入

时间:2022-04-20 05:03:54

the objective of my question is very simple. The first input that I get from the user is n (number of test cases). For each test case, the program will scan a string input from the user. And each of these strings I will process separately. The question here is how can I get string inputs and process them separately in C language??? The idea is similar to the dictionary concept where we can have many words which are individual arrays inside one big array.

我问题的目的很简单。我从用户那里得到的第一个输入是n(测试用例的数量)。对于每个测试用例,程序将扫描用户输入的字符串。我将分别处理每一个字符串。这里的问题是如何获得字符串输入并分别用C语言处理它们?这个想法类似于字典概念,我们可以在一个大数组中有许多单词,它们是单个数组。

The program I have written so far:

到目前为止我写的程序:

#include <stdio.h>
#define max 100
int main (){
int n; // number of testcases
char str [100];
scanf ("%d\n",&n);
for (int i =0;i <n;i++){
scanf ("%s",&str [i]);
}
getchar ();
return 0;
}

Can someone suggest what should be done?

有人建议应该做些什么吗?

The input should be something like this:

输入应该是这样的:

Input 1:

输入1:

3

3

Shoe

Horse

House

房子

Input 2:

输入2:

2

2

Flower

Bee

蜜蜂

here 3 and 2 are the values of n, the number of test cases.

这里3和2是n的值,测试用例的个数。

3 个解决方案

#1


3  

First of all, Don't be confused between "string" in C++ , and "Character Array" in C.

首先,不要混淆c++中的“string”和C中的“Character Array”。

Since your question is based on C language, I will be answering according to that...

因为你的问题是基于C语言的,所以我将根据C语言回答你的问题。

#include <stdio.h>
int main (){

    int n; // number of testcases
    char str [100][100] ; // many words , as individual arrays inside one big array

    scanf ("%d\n",&n);

    for (int i =0;i <n;i++){
        scanf ("%s",str[i]); // since you are taking string , not character
    }

    // Now if you want to access i'th word you can do like
    for(int i = 0 ; i < n; i++)
        printf("%s\n" , str[i]);
    getchar ();
    return 0;

}

Now here instead of using a two-dimensional array, you can also use a one-dimensional array and separate two words by spaces, and store each word's starting position in some another array. (which is lot of implementation).

现在,您可以使用一维数组并按空格分隔两个单词,并将每个单词的起始位置存储在另一个数组中,而不是使用二维数组。(很多实现)。

扫描C中的每个测试用例的字符串输入

#2


1  

First of all yours is not C program, as you can't declare variable inside FOR loop in C, secondly have created a prototype using Pointer to Pointer, storing character array in matrix style datastructure, here is the code :-

首先你的不是C程序,因为你不能在C中为循环声明变量,其次用指针创建了一个原型,将字符数组存储在矩阵样式的数据结构中,这里是代码:-

#include <stdio.h>
#include <stdlib.h>
#define max 100
int main (){
int n,i; // number of testcases
char str [100];
char **strArray;
scanf ("%d",&n);
strArray = (char **) malloc(n);
for (i =0;i <n;i++){
(strArray)[i] = (char *) malloc(sizeof(char)*100);
scanf ("%s",(strArray)[i]);
}
for (i =0;i <n;i++){

    printf("%s\n",(strArray)[i]);
    free((strArray)[i]);
}

getchar ();
return 0;
}

#3


1  

#include <stdio.h>
#define MAX 100        // poorly named

int n=0; // number of testcases
char** strs=0;

void releaseMemory()    // don't forget to release memory when done
{
    int counter;    // a better name

    if (strs != 0)
    {
        for (counter=0; counter<n; counter++)
        {
            if (strs[counter] != 0)
                free(strs[counter]);
        }
        free(strs);
    }
}

int main ()
{
    int counter;    // a better name

    scanf("%d\n",&n);
    strs = (char**) calloc(n,sizeof(char*));
    if (strs == 0)
    {
        printf("outer allocation failed!")
        return -1;
    }
    for (counter=0; counter<n; counter++)
    {
        strs[counter] = (char*) malloc(MAX*sizeof(char));
        if (strs[counter] == 0)
        {
            printf("allocate buffer %d failed!",counter)
            releaseMemory();
            return -1;
        }
        scanf("%s",&strs[counter]);    // better hope the input is less than MAX!!
        // N.B. - this doesn't limit input to one word, use validation to handle that
    }
    getchar();

    // do whatever you need to with the data

    releaseMemory();
    return 0;
}

#1


3  

First of all, Don't be confused between "string" in C++ , and "Character Array" in C.

首先,不要混淆c++中的“string”和C中的“Character Array”。

Since your question is based on C language, I will be answering according to that...

因为你的问题是基于C语言的,所以我将根据C语言回答你的问题。

#include <stdio.h>
int main (){

    int n; // number of testcases
    char str [100][100] ; // many words , as individual arrays inside one big array

    scanf ("%d\n",&n);

    for (int i =0;i <n;i++){
        scanf ("%s",str[i]); // since you are taking string , not character
    }

    // Now if you want to access i'th word you can do like
    for(int i = 0 ; i < n; i++)
        printf("%s\n" , str[i]);
    getchar ();
    return 0;

}

Now here instead of using a two-dimensional array, you can also use a one-dimensional array and separate two words by spaces, and store each word's starting position in some another array. (which is lot of implementation).

现在,您可以使用一维数组并按空格分隔两个单词,并将每个单词的起始位置存储在另一个数组中,而不是使用二维数组。(很多实现)。

扫描C中的每个测试用例的字符串输入

#2


1  

First of all yours is not C program, as you can't declare variable inside FOR loop in C, secondly have created a prototype using Pointer to Pointer, storing character array in matrix style datastructure, here is the code :-

首先你的不是C程序,因为你不能在C中为循环声明变量,其次用指针创建了一个原型,将字符数组存储在矩阵样式的数据结构中,这里是代码:-

#include <stdio.h>
#include <stdlib.h>
#define max 100
int main (){
int n,i; // number of testcases
char str [100];
char **strArray;
scanf ("%d",&n);
strArray = (char **) malloc(n);
for (i =0;i <n;i++){
(strArray)[i] = (char *) malloc(sizeof(char)*100);
scanf ("%s",(strArray)[i]);
}
for (i =0;i <n;i++){

    printf("%s\n",(strArray)[i]);
    free((strArray)[i]);
}

getchar ();
return 0;
}

#3


1  

#include <stdio.h>
#define MAX 100        // poorly named

int n=0; // number of testcases
char** strs=0;

void releaseMemory()    // don't forget to release memory when done
{
    int counter;    // a better name

    if (strs != 0)
    {
        for (counter=0; counter<n; counter++)
        {
            if (strs[counter] != 0)
                free(strs[counter]);
        }
        free(strs);
    }
}

int main ()
{
    int counter;    // a better name

    scanf("%d\n",&n);
    strs = (char**) calloc(n,sizeof(char*));
    if (strs == 0)
    {
        printf("outer allocation failed!")
        return -1;
    }
    for (counter=0; counter<n; counter++)
    {
        strs[counter] = (char*) malloc(MAX*sizeof(char));
        if (strs[counter] == 0)
        {
            printf("allocate buffer %d failed!",counter)
            releaseMemory();
            return -1;
        }
        scanf("%s",&strs[counter]);    // better hope the input is less than MAX!!
        // N.B. - this doesn't limit input to one word, use validation to handle that
    }
    getchar();

    // do whatever you need to with the data

    releaseMemory();
    return 0;
}