如何读取数组并分析输入

时间:2014-11-13 14:01:22

标签: c

我只是想知道是否有某种方法可以读取数组,然后根据输入的字母做一些事情?

例如:如果是罗马数字;输入MM是否有某种方式可以看到输入了2个M并显示M的值?

输出为:1000 + 1000。

你能告诉我这个功能的名称吗,因为这是一个作业,我不希望有人为我做这件事,我只是不知道从哪里开始。

示例:char romanNumerals[2] = {"MMMCMXCVIII"};

4 个答案:

答案 0 :(得分:0)

最好的办法是使用scanf中的stdio.h功能。

char str[3];
scanf("%s", str);

将最多两个字符从标准输入和空终止符(\0)存储到char指向的str数组中。

答案 1 :(得分:0)

char romanNumerals[2] = {"MMMCMXCVIII"};

不对,因为它只能容纳1个元素(\0为+1)。将其更改为

char romanNumerals[] = "MMMCMXCVIII";

在进行上述初始化时,编译器将为数组选择正确的大小。

然后,您需要一个变量来添加每个罗马数字的总和。所以创建

int sum=0;

您需要循环播放数组的时间长度,以便检查每个字母。

int i,len=strlen(romanNumerals);
for(i = 0;i < len;i++)
{
//body of for loop
}
应该包含

string.h以便使用返回字符串长度的strlen函数。

现在,使用

检查for循环体内的每个字母
if(romanNumerals[i]=='M')
    sum=sum+1000;
else if(romanNumerals[i]=='C')
    sum=sum+/*the corresponding value*/;
else if(...)
    sum=sum+/*value*/;
//etc etc

然后最后打印sum

答案 2 :(得分:0)

所有其他答案都是正确的,但请记住,如果您只是将输入字母与查找相加(M = 1000,C = 100,X = 10,V = 5,I = 1),则具有“MMMCMXCVIII”意味着3000 + 100 + 1000 + 10 + 100 + 5 + 3 = 4218,这不是“MMMCMXCVIII”在罗马数字中的含义(实际上意味着3998)。

答案 3 :(得分:0)

由于NSimon提供的链接中解释的原因(参见第1条评论)scanf()不是输入字符串长度未知的最佳选择。

其他选项包括fgets()getline()。要记住的是,正确形成的字符串由空字符终止 - 通常写为&#39; \ 0&#39;。因此,如果所有其他方法都失败了,您可以始终使用fgetc()函数在某种循环中读取char for char,并在缓冲区已满或者&#39; \ 0&#39;找到了。

阅读数组太多了。在评估罗马数字时,最好的方法是从后面开始。罗马数字有一个(不太简单)排序:

我&lt; V&lt; X&lt; L&lt; C&lt; D&lt;中号

向后阅读你需要遵循一些直接的规则:

  • 最低有效数据包始终是最后一个(即IXL错误,应该是LIX = 59)
  • 如果X或V在I之前,则减去1,否则添加值。
  • 如果L或C前面是X,则减去10,否则添加值。
  • 如果D或M前面是C,则减去100,否则添加值。

请注意M&amp; D只能在C或M. L&amp;之前。 C只能在X或C之前.X&amp; V只能在I或X之前。其他任何表示格式错误的数字。

因此,从后面开始工作应该相当容易获得正确的值。