我们只需要使用逐位操作即可完成此操作。任何提示都将不胜感激。刚开始学习c.
输入:abcdefghijklmnopqrstuvxyz输出:hpxdlt|aiqyemu}bjrzfnv~cks
这就是我们要遵循的代码存根。
#include <stdio.h>
int main(void)
{
int inChar, outChar;
while ((inChar = getchar()) != EOF)
{
// Your bitwise code appears here…
// last instruction in while loop
putchar(outChar);
}
return 0;
}
函数getchar((返回表示标准输入的ASCII编码字符的整数。putchar((函数将指定的整数转换为相应的ASCII字符,并将其发布到标准输出
c#中的解决方案。我相信你可以为它导出c中的并行代码。
static void Main(string[] args)
{
using (StreamReader sr = new StreamReader(@"<input_file>"))
{
StringBuilder input = new StringBuilder();
StringBuilder output = new StringBuilder();
while (sr.Peek() >= 0)
{
var charFromFile = sr.Read();
input.Append((char)charFromFile);
var isFirstBitset = IsBitSet(charFromFile, 0);
var isSecondBitset = IsBitSet(charFromFile, 1);
var isFourthBitset = IsBitSet(charFromFile, 3);
var isFifthBitset = IsBitSet(charFromFile, 4);
// If first bit is set
if (isFirstBitset)
{
charFromFile = SetBit(charFromFile, 3);
if (!isFourthBitset)
charFromFile = ClearBit(charFromFile, 0);
}
// If 2nd bit is set
if (isSecondBitset)
{
charFromFile = SetBit(charFromFile, 4);
if (!isFifthBitset)
charFromFile = ClearBit(charFromFile, 1);
}
// if 4th bit is set
if (isFourthBitset)
{
charFromFile = SetBit(charFromFile, 0);
if (!isFirstBitset)
charFromFile = ClearBit(charFromFile, 3);
}
// if 5th bit is set
if (isFifthBitset)
{
charFromFile = SetBit(charFromFile, 1);
if (!isSecondBitset)
charFromFile = ClearBit(charFromFile, 4);
}
output.Append((char)charFromFile);
}
Console.WriteLine("Input = {0}", input.ToString());
Console.WriteLine("Output = {0}", output.ToString());
}
}
public static bool IsBitSet(int b, int pos)
{
return (b & (1 << pos)) != 0;
}
public static int SetBit(int value, int bitToSet)
{
return value | (int)Math.Pow(2, bitToSet);
}
public static int ClearBit(int value, int bitToClear)
{
return (value & ~((int)Math.Pow(2, bitToClear)));
}
#include <stdio.h>
#include <math.h>
bool IsBitSet(int b, int pos)
{
return (b & (1 << pos)) != 0;
}
int SetBit(int value, int bitToSet)
{
return value | (int)pow(2, bitToSet);
}
int ClearBit(int value, int bitToClear)
{
return (value & ~((int)pow(2, bitToClear)));
}
int main(void)
{
unsigned char inChar= 0, outChar=0;
while ((inChar = getchar()) != EOF)
{
// Your bitwise code appears here…
char isFirstBitset = IsBitSet(inChar, 0);
char isSecondBitset = IsBitSet(inChar, 1);
char isFourthBitset = IsBitSet(inChar, 3);
char isFifthBitset = IsBitSet(inChar, 4);
// If first bit is set
if (isFirstBitset)
{
inChar = SetBit(inChar, 3);
if (!isFourthBitset)
inChar = ClearBit(inChar, 0);
}
// If 2nd bit is set
if (isSecondBitset)
{
inChar = SetBit(inChar, 4);
if (!isFifthBitset)
inChar = ClearBit(inChar, 1);
}
// if 4th bit is set
if (isFourthBitset)
{
inChar = SetBit(inChar, 0);
if (!isFirstBitset)
inChar = ClearBit(inChar, 3);
}
// if 5th bit is set
if (isFifthBitset)
{
inChar = SetBit(inChar, 1);
if (!isSecondBitset)
inChar = ClearBit(inChar, 4);
}
outChar = inChar;
putchar(outChar);
}
return 0;
}