簡體   English   中英

掃描字符串輸入C中的每個測試用例

[英]Scan String Input for each testcase in C

我的問題的目標很簡單。 我從用戶那里得到的第一個輸入是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的值,測試用例的數量。

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

由於您的問題是基於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;

}

現在這里不使用二維數組,也可以使用一維數組並用空格分隔兩個單詞,並將每個單詞的起始位置存儲在另一個數組中。 (這是很多實施)。

在此輸入圖像描述

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

首先你的不是C程序,因為你不能在C中用FOR循環聲明變量,其次用指針到指針創建一個原型,在矩陣式數據結構中存儲字符數組,這里是代碼: -

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM