如何读取逗号分隔字符串中的名称和整数值?
How to read a name and integer value in a comma separated string?
我正在尝试传递一个数字和一组字符串 S 作为输入。这里字符串 S 包含一个名称,后跟一个逗号,然后是一个多位整数。程序必须显示对应编号最大的名称。
考虑输入:
4
Will,13
Bob,7
Mary,56
Gail,45
输出:
Mary
因为玛丽对应的数字是56,是最高的。
我面临的问题是获取两个数组中的名称和编号,即
w[][] a[][]
这里我试过二维数组,但我无法读取逗号分隔值。
这是我的代码:
#include <stdio.h>
#include <ctype.h>
int main(){
char W[200][1000];//Two dimensional arrays to store names
int a[200];//To store the numbers
int i,n;
scanf("%d",&n);//Number of Strings
for (i=0; i<n; i++) {
scanf("%[^\n]s",W[i]);//To read the name
getchar();//To read the comma
scanf("%d",&a[i]);//To read the number
}
printf("\n");
for (i=0; i<n; i++) {
printf ("W[%d] = %s a[%d] = %d\n" ,i,W[i],i,a[i]);//Displaying the values
}
//To find out the maximum value
max = a[0];
for(i=0;i<n;i++){
if(a[i]>=max) { a[i] = max; pos = i; }
}
printf("\n%s",W[pos]); //Print the name corresponding to the name
return(0);
}
所以基本上我想将逗号前的名字提取到字符数组中,将逗号后的数字提取到数字数组中。
如何更正此代码?
一般建议:优先使用堆分配值(并使用 malloc
或 realloc
& free
;阅读 C dynamic memory allocation)而不是像 [=13= 这样的大变量].我建议处理 char**W;
事情。
The program must display the name with the highest corresponding number.
多想想。您不需要存储所有以前读取的数字,并且您应该将程序设计为能够处理数百万(名称,分数)行的文件(不会占用大量内存)。
那么,scanf("%[^\n]s",W[i]);
是而不是做你想做的。阅读 仔细 documentation of scanf
(and test its return value). Use fgets
-and preferably getline
如果你有它 - 阅读一行,然后解析它(可能用 sscanf
)。
So basically I want to extract the name before the comma into the character array and the number after the comma into the number array.
考虑使用标准 lexing and parsing 技术,也许在每一行上。
PS。我不想做你的作业。
这是我的工作代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char *str[100];
int i,a[100];
int num=100;//Maximum length of the name
int n,max,pos;
scanf("%d",&n);//Number of strings
for(i=0;i<n;i++)
{
str[i]=(char *)malloc((num+1)*sizeof(char));//Dynamic allocation
scanf("%[^,],%d",str[i],&a[i]);
}
max = a[0];
pos = 0;
for(i=1;i<n;i++){
if(a[i]>max) {max = a[i]; pos = i;}
}
printf("%s\n",str[pos]);//Prints the name corresponding to the greatest value
return 0;
}
我已经使用 malloc 来存储字符串的内容 dynamically.Also 我已经使用带有格式的 scanf() 来单独获取字符串和数字 array.But 如果有更好的做同样的事情真的很棒。
我正在尝试传递一个数字和一组字符串 S 作为输入。这里字符串 S 包含一个名称,后跟一个逗号,然后是一个多位整数。程序必须显示对应编号最大的名称。
考虑输入:
4
Will,13
Bob,7
Mary,56
Gail,45
输出:
Mary
因为玛丽对应的数字是56,是最高的。
我面临的问题是获取两个数组中的名称和编号,即
w[][] a[][]
这里我试过二维数组,但我无法读取逗号分隔值。 这是我的代码:
#include <stdio.h>
#include <ctype.h>
int main(){
char W[200][1000];//Two dimensional arrays to store names
int a[200];//To store the numbers
int i,n;
scanf("%d",&n);//Number of Strings
for (i=0; i<n; i++) {
scanf("%[^\n]s",W[i]);//To read the name
getchar();//To read the comma
scanf("%d",&a[i]);//To read the number
}
printf("\n");
for (i=0; i<n; i++) {
printf ("W[%d] = %s a[%d] = %d\n" ,i,W[i],i,a[i]);//Displaying the values
}
//To find out the maximum value
max = a[0];
for(i=0;i<n;i++){
if(a[i]>=max) { a[i] = max; pos = i; }
}
printf("\n%s",W[pos]); //Print the name corresponding to the name
return(0);
}
所以基本上我想将逗号前的名字提取到字符数组中,将逗号后的数字提取到数字数组中。
如何更正此代码?
一般建议:优先使用堆分配值(并使用 malloc
或 realloc
& free
;阅读 C dynamic memory allocation)而不是像 [=13= 这样的大变量].我建议处理 char**W;
事情。
The program must display the name with the highest corresponding number.
多想想。您不需要存储所有以前读取的数字,并且您应该将程序设计为能够处理数百万(名称,分数)行的文件(不会占用大量内存)。
那么,scanf("%[^\n]s",W[i]);
是而不是做你想做的。阅读 仔细 documentation of scanf
(and test its return value). Use fgets
-and preferably getline
如果你有它 - 阅读一行,然后解析它(可能用 sscanf
)。
So basically I want to extract the name before the comma into the character array and the number after the comma into the number array.
考虑使用标准 lexing and parsing 技术,也许在每一行上。
PS。我不想做你的作业。
这是我的工作代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char *str[100];
int i,a[100];
int num=100;//Maximum length of the name
int n,max,pos;
scanf("%d",&n);//Number of strings
for(i=0;i<n;i++)
{
str[i]=(char *)malloc((num+1)*sizeof(char));//Dynamic allocation
scanf("%[^,],%d",str[i],&a[i]);
}
max = a[0];
pos = 0;
for(i=1;i<n;i++){
if(a[i]>max) {max = a[i]; pos = i;}
}
printf("%s\n",str[pos]);//Prints the name corresponding to the greatest value
return 0;
}
我已经使用 malloc 来存储字符串的内容 dynamically.Also 我已经使用带有格式的 scanf() 来单独获取字符串和数字 array.But 如果有更好的做同样的事情真的很棒。