我在程序的这一部分遇到问题,我需要将特定字母转换为特定数字(基本上如果是输入,那么我希望它返回1)。 intArray正在捕获数字,但在此之后它不会结束。它继续打印出更多。字符数组必须没有特定的长度,所以我只是放了一个大的数量。 str1将是输入的字母。
char str1[200];
char alphabet[27] = "abcdefghijklmnopqrstuvwxyz";
int num[27] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26};
int intArr1[200];
w = 0;
for(i=0;i<27;i++)
{
if(str1[w] == alphabet[i])
{
intArr1[w] = num[i];
w++;
i = 0;
}
else if(str1[w] == '\0')
{
break;
}
}
int len = sizeof(intArr1);
for(i=0;i<len;i++)
{
printf("%d", intArr1[i]);
}
答案 0 :(得分:1)
夫妻问题:
int len = sizeof(intArr1); // this line returns the number of
// bytes the array occupies (800 in your case)
for(i=0;i<len;i++)
{
printf("%d", intArr1[i]);
}
sizeof
操作不适合您的使用。
其次,当你填充intArr
时,你会保留一个计数器来保持w
的有用长度,称为len
。您应该使用此而不是计算的for(i=0;i<w;i++)
{
printf("%d", intArr1[i]);
}
变量。
w
这应该打印数组的有用内容,在你认为它应该结束时结束。
正如评论中指出的那样,根据您的总体目标,您不会仅仅依靠使用intArr
来维持计数,而是保留一个跟踪大小的整体全局计数器。 {{1}},因此您可以为输入数据的多次传递保留有效的索引指针。
答案 1 :(得分:1)
不是使用两个数组来比较和打印每个字符的等效数字,而只需要通过移动ASCII码来转换它们(从要转换的字符中减去字符&#39; a&#39; ASCII代码)添加1)
理论值:
'a' == 97
'a' - 'a' + 1 == 1
'b' - 'a' + 1 == 2
...
'z' - 'a' + 1 == 26
代码:
void print_array(char *input)
{
int i = 0;
while (input[i] != '\0')
{
printf("%d", input[i] - 'a' + 1);
i++;
}
}
int main()
{
char input[256];
printf("input : ");
scanf("%s", input);
print_array(input);
return 0;
}
答案 2 :(得分:1)
the following code is one possibility
// ??? what to do when input char not a...z ???
#define MAX_SIZE (200)
int i=0; // input index
int j=0; // output index
char str1[MAX_SIZE]; // the input characters, null terminated
int intArr1[MAX_SIZE] = {']0'}; // clear the destination array
for(; i < strlen(str1); i++ )
{
if( 'a' <= str1[i] && 'z' >= str1[i] )
{ // then, convert char to number
intArr1[j] = str1[i] - 'a' + 1; // +1 so 'a' results in 1
// update destination index
j++;
} // end if
} // end for
// when here, 'j' contains number of characters in destination
for(i = 0; i < j; i++)
{
printf("%d", intArr1[i]);
}
答案 3 :(得分:0)
sizeof(intArr1)
不会给你一个数组长度。它给出了数组占用的字节数。如果你想要数组的长度,你应该使用sizeof(intArr1)/sizeof(intArr1[0])
- 而不是给你数组中元素的数量。