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

时间:2017-06-02 03:48:31

标签: c arrays string dictionary recursion

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

到目前为止我写的程序:

#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;
}

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

输入应该是这样的:

输入1:

3

鞋子

众议院

输入2:

2

此处3和2是 n 的值,即测试用例的数量。

3 个答案:

答案 0 :(得分:3)

首先,不要在&#34; string&#34;之间混淆。在C ++中,&#34;字符数组&#34;在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;

}

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

enter image description here

答案 1 :(得分: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;
}

答案 2 :(得分:1)

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

#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;
}