c-两组ASCII字符之间的映射



我们只需要使用逐位操作即可完成此操作。任何提示都将不胜感激。刚开始学习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;
}​​​​​​

最新更新