#include <stdio.h>
#include <stdlib.h>
int size = 100;
int strlen (int*);
int main()
{
int *a = NULL,i =0;
a =(int *)malloc (size * sizeof(int));
if (a == NULL)
return -1;
while(scanf("%d", a+i) == 1)
{
i ++;
if (i == size)
{
a =(int *)realloc(a,size);
size = size * 2;
if (a == NULL)
return -1;
}
}
int len = strlen(a);
printf ("%d", len);
if (a)
free (a);
return 0;
}
int strlen (int *p)
{
if (*p == '\0')
return 0;
else
return 1 + strlen(p + 1);
}
uj5u.com熱心網友回復:
#include <stdio.h>
#include <stdlib.h>
int size = 100;
int my_strlen (char *);
int main()
{
//int *a = NULL,i =0;
int i =0;
char *a = NULL;
a =(char *)malloc (size * sizeof(char));
if (a == NULL)
return -1;
while(scanf("%c", a+i) == 1)
{
i ++;
if (i == size)
{
a =(char *)realloc(a, size*2 *sizeof(char));
size = size * 2;
if (a == NULL)
return -1;
}
}
printf("%d\n", i);
a[i] = 0;
int len = my_strlen(a);
printf ("%d", len);
if (a)
free (a);
return 0;
}
//int my_strlen (int *p)
int my_strlen (char *p)
{
if (*p == '\0')
return 0;
else
return 1 + my_strlen(p + 1);
}
供參考~
字串不等同于int。字串是char *
uj5u.com熱心網友回復:
#include <stdio.h>
#include <stdlib.h>
int size = 100;
int my_strlen (char *);
int main()
{
//int *a = NULL,i =0;
int i =0;
char *a = NULL;
a =(char *)malloc (size * sizeof(char));
if (a == NULL)
return -1;
while(scanf("%c", a+i) == 1 && a[i] != '\n')
{
i ++;
if (i == size)
{
a =(char *)realloc(a, size*2 *sizeof(char));
size = size * 2;
if (a == NULL)
return -1;
}
}
//printf("%d\n", i);
int len = my_strlen(a);
printf ("%d", len);
if (a)
free (a);
return 0;
}
//int my_strlen (int *p)
int my_strlen (char *p)
{
if (*p == '\n')
return 0;
else
return 1 + my_strlen(p + 1);
}
另一個版本,供參考~
uj5u.com熱心網友回復:
注意第一個版本,需要退出while回圈,方法是linux 用ctrl+d,windows下用ctrl+z第二個版本,輸入字串之后直接回車即可。
字串是以'\0'結束的,整型資料跟'\0'就沒關系了。
uj5u.com熱心網友回復:
萬分感謝,可為什么不能用int來存字符,int開辟的存盤空間不是要比char大么,這個實在是想不明白uj5u.com熱心網友回復:
while(scanf("%d", a+i) == 1)這里指定輸入整數,如果輸入的不是有效的整數格式,比如是一個字母, 那么回傳值就是0, 你的while就執行不下去了
即便你輸入的數字, 連續輸入了多個數字,它也會當做是一個整數來處理, int型別的最大的長度在10位
你不超過10位的數字,都會被認為只有1個
樓主的代碼可以用來測驗這樣的字串 123 456 789 322
測驗這樣的字串里面有多少個整數
如果不是這種情況,就要參考一樓的代碼了
此外,關于ralloc函式的時候,
a =(int *)realloc(a,size);
size = size * 2;
這兩行寫反了把, 要重新分配一個雙倍的記憶體
uj5u.com熱心網友回復:
不是不能用int來存字符,可以存的, 拿四個位元組來存一個自己的資料, 浪費非要這么玩兒, 你只要改造scanf那個代碼就可以了
從%d,改成%c,在你那個自定義的strlen下是可以的
此時千萬別把strlen引數改成char*, 否則又不對了
因為int是四位元組, char只在最低位, 第一個字符判斷不是0,第二個就是0, 那就真是不管你輸入多少都是回傳1
最初代碼一直回傳1的原因,估計是你輸入的數字不夠長, 超過10位就不是1了
按照上面的辦法,同時改造strlen的時候,那可真是不管輸入什么都會回傳1了
uj5u.com熱心網友回復:
萬分感謝,就是那個realloc是直接在原來第一段后再加一段記憶體,一共兩段,還是在原來的一段后直接加兩段記憶體,一共三段?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/107197.html
標籤:C語言
上一篇:C++怎樣自動點擊網頁上的按鈕?
下一篇:簡單問題求助
