[英]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.