我想制作一個程式,將我的字串輸入(char)轉換為 ASCII 數字,然后分離 ASCII 數字并將其轉換為二維陣列,然后像這樣在輸出中顯示二維陣列。
輸入:fun(str 是我用于輸入的字串的名稱)
//The string char input
str = fun
然后程式將輸入(字串 char)轉換為 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 數字并將其轉換為二維陣列。('asc' 是二維陣列的名稱)
//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-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)(多少在程式是無限的。)。我也不能使用gets,puts,define等。)
uj5u.com熱心網友回復:
認為這部分代碼會做什么:
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,strlen(str)將在內部陣列宣告為 3 時為 5。因此這暗示可能存在錯誤...
接下來,您想要進行以 10 為底的分解,因此我希望您的代碼中永遠不會出現除數和余數 10。
請記住:您最好的朋友將是一張紙和一支鉛筆。用偽代碼或簡單地用數學運算子手工寫下你想做的事情。我預計:
- 模 10 運算(每個字符至少 2 次)
- 除以 10 運算(每個字符至少 2 次)
一旦這部分完成(并且只有到那時),就該回到你的鍵盤了......
uj5u.com熱心網友回復:
首先這個呼叫的引數型別 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 回圈
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] = '\0';
printf( "Input: " );
scanf( "Is", 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/405005.html
標籤:
