我只是想知道是否有某种方法可以读取数组,然后根据输入的字母做一些事情?
例如:如果是罗马数字;输入MM是否有某种方式可以看到输入了2个M并显示M的值?
输出为:1000 + 1000。
你能告诉我这个功能的名称吗,因为这是一个作业,我不希望有人为我做这件事,我只是不知道从哪里开始。
示例:char romanNumerals[2] = {"MMMCMXCVIII"};
答案 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;中号
向后阅读你需要遵循一些直接的规则:
请注意M&amp; D只能在C或M. L&amp;之前。 C只能在X或C之前.X&amp; V只能在I或X之前。其他任何表示格式错误的数字。
因此,从后面开始工作应该相当容易获得正确的值。