将字符字符串转换为 ASCII 数字,然后使用 C 语言将 ASCII 数字分开并将其转换为 2D 数组



我想制作一个程序,将字符串输入(char(转换为ASCII数字,然后分离ASCII数字并将其转换为二维数组,然后在输出中显示二维数组,如下所示。

输入:有趣(str是我用于输入的字符串的名称(

//The string char input
str = fun

然后程序将输入(字符串字符(转换为ASCII数字。(ascii是我用于ascii数字的数组/字符串的名称(

//ASCII numbers for 'fun' (f u n)(left to right)
ascii = 102 117 110

注:102是ASCII中的字母"f",117是ASCII中字母"u",110是ASCII中字符"n"。

然后,程序分离ASCII数字并将其转换为2d数组。("asc"是2d阵列的名称(

//ASCII for letter 'f'
asc[0][0] = 1
asc[0][1] = 0
asc[0][2] = 2
//ASCII for letter 'u'
asc[1][0] = 1
asc[1][1] = 1
asc[1][2] = 7
//ASCII for letter 'n'
asc[2][0] = 1
asc[2][1] = 1
asc[2][2] = 0

输出:1-0-2--1-7-1-1-0

以下是这个程序的输入和预期输出:

Input: fun
Output: 1-0-2--1-1-7--1-1-0

这是我制作的完整代码:

#include <stdio.h>
#include <string.h>
int main(){
char str[50];
printf("Input: ");
scanf("%s", &str); //string input
int i;
int ascii[50];
for(i = 0; i < strlen(str); i++){
ascii[i] = str[i]; //converting string to ascii
}
int x, y;
int asc[50][3];
for(x = 0; x < strlen(str); x++){
for(y = 0; y = strlen(str); y++){
asc[x][y] = ascii[x]; //separate ascii to 2d array
}
}
printf("Output: ");
for(x = 0; x < strlen(str); x++){
for(y = 0; y < strlen(str); y++){
printf("%d", asc[x][y]); //showing the result of separation/conversion
printf("-");
}
}
return 0;
}

你能告诉我代码出了什么问题吗?它不会输出想要/期望的结果。相反,输入将永远循环(输入不会停止(。提前感谢你给我一个解决这个问题的办法!

(注意:该程序被限制为只能使用两个标头(stdio.h和string.h(。该程序也被限制为只使用三个str函数(strcpy、strcmp、strlen((尽管程序中有多少是无限的。(。我也不能使用get、put、define等。(

你认为这部分代码会做什么:

for (x = 0; x < strlen(str); x++) {
for (y = 0; y = strlen(str); y++) {
asc[x][y] = ascii[x]; //separate ascii to 2d array
}
}

首先,您应该注意到,如果输入funny,那么当内部数组声明为大小为3时,strlen(str)将为5。所以这是一个暗示,一个错误很可能存在。。。

接下来,您想进行一个基于10的分解,所以我希望使用10的除法和余数,这在您的代码中从未出现过。

记住:你们最好的朋友在这里将是一张纸和一支铅笔。用伪代码或简单地用数学运算符手工写下你想做什么。我希望:

  • 模10运算(每个字符至少2次(
  • 除以10运算(每个字符至少2次(

一旦完成这一部分(并且只有到那时(,就应该回到你的键盘上了。。。

首先是scanf的此调用的参数类型

scanf("%s", &str);

不正确。你至少需要像一样写作

scanf("%s", str);

此数组声明和对应的for循环

int i;
int ascii[50];
for(i = 0; i < strlen(str); i++){
ascii[i] = str[i]; //converting string to ascii
}

是多余的。您可以直接使用阵列

int asc[50][3];

此外,

ascii[i] = str[i];

应该像一样重写

ascii[i] = ( unsigned char )str[i];

这些嵌套的循环

for(x = 0; x < strlen(str); x++){
for(y = 0; y = strlen(str); y++){
asc[x][y] = ascii[x]; //separate ascii to 2d array
}
}
printf("Output: ");
for(x = 0; x < strlen(str); x++){
for(y = 0; y < strlen(str); y++){
printf("%d", asc[x][y]); //showing the result of separation/conversion
printf("-");
}
}

无效,因为数组asc的第二个索引必须在范围[0, 3 )中。

程序可以按照以下方式

#include <stdio.h>
#include <string.h>
int main( void )
{
enum { N = 50 };
char s[N];
s[0] = '';
printf( "Input: " );
scanf( "%49s", s );
size_t n = strlen( s );
unsigned char a[n][3];

for ( size_t i = 0; i < n; i++ )
{
const unsigned char Base = 10;

memset( a[i], 0, sizeof( a[i] ) );
unsigned char c = s[i];

for ( size_t j = sizeof( a[i] ); c; c /= Base )
{
a[i][--j] = c % Base + '0';
}
}

for ( size_t i = 0; i < n; i++ )
{
if ( i != 0 ) 
{
putchar( '-' );
putchar( '-' );
}

for ( size_t j = 0; j < sizeof( a[i] ); j++ )
{
if ( j != 0 ) putchar( '-' );
putchar( a[i][j]  );
}
}

putchar( 'n' );
}

程序输出可能是

Input: fun
1-0-2--1-1-7--1-1-0

最新更新