C和素数中的数组

时间:2015-06-15 02:06:28

标签: c arrays numbers variable-assignment

我的编程任务需要帮助,除了一部分我完成了所有工作!这是作业:

  

问题1:字符串操作和数据安全:为了提高数据和信息传输的数据安全性,正在实施动态字符编码。原始字符的修改可以使用前8个主要成员[1,2,3,5,7,11,13,17]:第一个字符增强1;第二个字符乘以2,第三个乘以3,...第8个字符乘以17.接下来的8个字符使用相反顺序17..1的素数,并减小这些值。使用至少64个字符的总消息[数量为8个字符]并重复修改前1个的1-17个过程;修改为下一个8的17 -1,依此类推。发表自己的信息。在对消息进行编码之后,还应该进行解码,以恢复原始消息。您可能还想更改小写和大写过渡。

   Example:  Original Message           A     B     C    D. …..
                     Normal ASCII      65    66    67   68   ….
                     Prime Numbers      1     2     3    5   ….          
                     Enhanced ASCII    66    68    70   73 ….
                     Coded Message      B     D     F    I   ……

我无法打印出素数而不会弄乱代码,例如编码和解码的ASCII码以及编码和解码的代码。到目前为止这是我的代码: 如果你能以某种方式帮助我,那就太好了!我真的很感激,谢谢。

size_t x;
int i, c;

i = 1;
c = 0;

char text[65];
int s[8] = {1, 2, 3, 5, 7, 11, 13, 17};

printf("Enter a line of text: "); // prompts user to enter text
fgets(text, 65, stdin); // reads input from user
printf("\nOriginal Message: ");
for(x = 0; x < strlen(text); ++x) // for loop to print original message
{
    printf("%c", text[x]);
} // end for

// ASCII Code
printf("\nASCII Code: ");
for(x = 0; x < strlen(text) - 1; ++x)
{
    printf("%d ", text[x]);
}

// prime numbers
// my issue is here
printf("\n\nPrime Numbers: ");
for(x = 0; x <= 8 ; ++x)
{
    if(c == 0)
    {
        if(i == 1)
        {
            printf("1 ");
            ++i;
        }
        else if(i == 2)
        {
            printf("2 ");
            ++i;
        }
        else if(i == 3)
        {
            printf("3 ");
            ++i;
        }
        else if(i == 4)
        {
            printf("5 ");
            ++i;
        }
        else if(i == 5)
        {
            printf("7 ");
            ++i;
        }
        else if(i == 6)
        {
            printf("11 ");
            ++i;
        }
        else if(i == 7)
        {
            printf("13 ");
            ++i;
        }
        else if(i == 8)
        {
            printf("17 ");
            ++c;
            ++x;
        }
    }
    if(c == 1)
    {
        if(i == 8)
        {
            printf("17 ");
            --i;
        }
        else if(i == 7)
        {
            printf("13 ");
            --i;
        }
        else if(i == 6)
        {
            printf("11 ");
            --i;
        }
        else if(i == 5)
        {
            printf("7 ");
            --i;
        }
        else if(i == 4)
        {
            printf("5 ");
            --i;
        }
        else if(i == 3)
        {
            printf("3 ");
            --i;
        }
        else if(i == 2)
        {
            printf("2 ");
            --i;
        }
        else if(i == 1)
        {
            printf("1 ");
            --c;
        }
    } // end outer if
} // issue ends here


for(x = 0; x < strlen(text) - 1; ++x)
{
    if(c == 0) // outer if statement increasing
    {
        if(i == 1) // inner if statement
        {
            text[x] = text[x] + 1;
            ++i;
        }
        else if (i == 2)
        {
            text[x] = text[x] + 2;
            ++i;
        }
        else if (i == 3)
        {
            text[x] = text[x] + 3;
            ++i;
        }
        else if(i == 4)
        {
            text[x] = text[x] + 5;
            ++i;
        }
        else if(i == 5)
        {
            text[x] = text[x] + 7;
            ++i;
        }
        else if(i == 6)
        {
            text[x] = text[x] + 11;
            ++i;
        }
        else if(i == 7)
        {
            text[x] = text[x] + 13;
            ++i;
        }
        else if(i == 8)
        {
            text[x] = text[x] + 17;
            ++c;
            ++x;
        } // end if statement
    } // end outer if statement
    if(c == 1) // outer if statement decreasing
    {
        if(i == 8)
        {
            text[x] = text[x] + 17;
            --i;
        }
        else if(i == 7)
        {
            text[x] = text[x] + 13;
            --i;
        }
        else if(i == 6)
        {
            text[x] = text[x] + 11;
            --i;
        }
        else if(i == 5)
        {
            text[x] = text[x] + 7;
            --i;
        }
        else if(i == 4)
        {
            text[x] = text[x] + 5;
            --i;
        }
        else if(i == 3)
        {
            text[x] = text[x] + 3;
            --i;
        }
        else if(i == 2)
        {
            text[x] = text[x] + 2;
            --i;
        }
        else if(i == 1)
        {
            text[x] = text[x] + 1;
            --c;
        }
    } // end outer if
} // end for
printf("\n\nEncrypted Message: ");
for(x = 0; x <= strlen(text) - 1; ++x)
{
   printf("%c", text[x]);
}

printf("\nEncrypted ASCII: ");
for(x = 0; x < strlen(text) - 1; x++)
{
    printf("%d ", text[x]);
}

c = 0;
i = 1;

for(x = 0; x < strlen(text) - 1; ++x)
{
    if(c == 0)
    {
        if(i == 1)
        {
            text[x] = text[x] - 1;
            ++i;
        }
        else if(i == 2)
        {
            text[x] = text[x] - 2;
            ++i;
        }
        else if(i == 3)
        {
            text[x] = text[x] - 3;
            ++i;
        }
        else if(i == 4)
        {
            text[x] = text[x] - 5;
            ++i;
        }
        else if(i == 5)
        {
            text[x] = text[x] - 7;
            ++i;
        }
        else if(i == 6)
        {
            text[x] = text[x] - 11;
            ++i;
        }
        else if(i == 7)
        {
            text[x] = text[x] - 13;
            ++i;
        }
        else if(i == 8)
        {
            text[x] = text[x] - 17;
            ++c;
            ++x;
        } // end if statement
    } // end outer if statement
    if(c == 1)
    {
        if(i == 8)
        {
            text[x] = text[x] - 17;
            --i;
        }
        else if(i == 7)
        {
            text[x] = text[x] - 13;
            --i;
        }
        else if(i == 6)
        {
            text[x] = text[x] - 11;
            --i;
        }
        else if(i == 5)
        {
            text[x] = text[x] - 7;
            --i;
        }
        else if(i == 4)
        {
            text[x] = text[x] - 5;
            --i;
        }
        else if(i == 3)
        {
            text[x] = text[x] - 3;
            --i;
        }
        else if(i == 2)
        {
            text[x] = text[x] - 2;
            --i;
        }
        else if(i == 1)
        {
            text[x] = text[x] - 1;
            --c;
        } // end inner if statements
    } // end outer if statements
} // end for

printf("\n\nDecrypted Message: ");
for(x = 0; x < strlen(text); ++x)
{
    printf("%c", text[x]);
}

printf("\nDecrypted ASCII: ");
for(x = 0; x < strlen(text) - 1; ++x)
{
    printf("%d ", text[x]);
}

put(&#34;&#34;); } // end main

1 个答案:

答案 0 :(得分:0)

字符用数字表示。例如,对于ASCII,z由数字122表示。如果您向该值添加某些内容,则会获得一个新值(例如122 + 17 = 139)。该新值可能不是有效的ASCII(例如128或更大),并且可能是控制代码(例如127是&#34;删除&#34;控制字符)。

由于值可能不再代表有效字符,因此您无法将其打印为字符。您需要将它们打印为值(例如for(x = 0; text[x] != 0; x++) { printf("%d ", text[x]); })。

更糟糕的是,对于&#34; signed char&#34;,添加会导致溢出,这是C中未定义的行为。您需要使用不同的数据类型(例如unsigned char或{ {1}})确保代码具有已定义/预期的行为。

还要注意你的长链&#34; if .. else if else。else if&#34;陈述应该是&#34; switch()&#34;有案件;更像这样:

uint8_t

然而;使用 switch(i) { case 1: text[x] = text[x] + 1; ++i; break; case 2: text[x] = text[x] + 2; ++i; break; ... } 您可以使用以下内容替换许多类似代码:

int s[16] = {1, 2, 3, 5, 7, 11, 13, 17, 17, 13, 11, 7, 5, 3, 2, 1};