我的问题的目标非常简单。我从用户那里得到的第一个输入是 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 的值,即测试用例的数量。
答案 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;
}
现在,您可以使用一维数组并使用空格分隔两个单词,而不是使用二维数组,并将每个单词的起始位置存储在另一个数组中。 (这是很多实现)。
答案 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;
}