#include<stdio.h>
#include<string.h>
int main(){
int n,m;
char a[100];
scanf("%d ",&n);
gets(a);
char b[1000][n];
char c[100];
int len=strlen(a);
int h=0,g=0;
for(int i=0;i<len;i++){
c[h]=a[i];
h++;
if(h==n){
h=0;
strcpy(b[g],c);
// printf("%s\n",b[g]);
g++;
}
}
printf("%s\n",b[0]);
return 0;
}
我想寫一個輸入一個字串,一個整數。把字串按每n個組成一個“小組”。就是我用一個二維陣列每一行都存盤每n個字符,形成一個字串。例如輸入字串abcdefgh與一個整數4.相應的一個二維陣列被賦值成是s【0】=“abcd”,s【1】=“efgh”。(s為一個二維陣列)
上面的代碼中注釋掉的部分// printf("%s\n",b[g]);如果不被注釋,即可正常輸出。如若按上面代碼最后再輸出的話,就會出現問題,為什么呀!
uj5u.com熱心網友回復:
以'\0'為結束符的字符陣列才是字串;陣列b,c都不是字串,用strcpy,%s這些操作存在問題。uj5u.com熱心網友回復:
char b[1000][n+1];...
strcpy(b[g],c);
strcpyt(&(b[g][n]),'\0');
好像都有點小問題,自己實作一下這些函式,也不難
uj5u.com熱心網友回復:
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#define STR_LEN 128
int main()
{
int i, j, n, cnt;
int len, row, col;
char str[STR_LEN];
char **pstr;
fgets(str, STR_LEN, stdin);
scanf("%d", &n);
if (n >= STR_LEN-1)
n = STR_LEN-1;
len = strlen(str);
if (len < STR_LEN)
len -= 1;
row = len / n + 1;
col = n + 1;
pstr = (char **)malloc(sizeof(char *) * row + 1);
if (!pstr)
exit(0);
for (i = 0; i < row; i++) {
pstr[i] = (char *)malloc(sizeof(char) * col);
if (!pstr[i])
exit(0);
}
i = 0;
cnt = 0;
while ( i < len && str[i]) {
for (j = 0; j < n; j++)
pstr[cnt][j] = str[i+j];
pstr[cnt][j] = 0;
i += n;
cnt++;
}
for (i = 0; i < cnt; i++)
puts(pstr[i]);
/*
int n,m;
char a[100];
scanf("%d ",&n);
gets(a);
//char b[1000][n];
//char b[1000][n];
char b[100][100];
char c[100];
int len=strlen(a);
int h=0,g=0;
for(int i=0;i<len;i++){
c[h]=a[i];
h++;
if(h==n){
h=0;
strcpy(b[g],c);
// printf("%s\n",b[g]);
g++;
}
}
printf("%s\n",b[0]);
*/
return 0;
}
供參考~
呼叫strcpy的前提是c是字串,即以'\0'結束的。
建議了解一下strcpy,
另外,n是輸入的,因此不能做陣列的列數。建議用動態申請空間,還可以節省很多空間。
uj5u.com熱心網友回復:
為啥它們不是字串呀
uj5u.com熱心網友回復:
謝謝大佬,初學者有點難看懂哈
uj5u.com熱心網友回復:
我把b[1000][n]的n改為n+1后。好像就對了哈
uj5u.com熱心網友回復:
首先可以試一下,先看對不對。
另外,樓主還沒學習malloc、二重指標這些嗎?
uj5u.com熱心網友回復:
以'\0'為結束符的字符陣列才是字串;陣列b,c都不是字串,用strcpy,%s這些操作存在問題。
應該是開辟的空間不夠吧改為b[1000][n+1]
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#define STR_LEN 128
int main()
{
int i, j, n, cnt;
int len, row, col;
char str[STR_LEN];
char **pstr;
fgets(str, STR_LEN, stdin);
scanf("%d", &n);
if (n >= STR_LEN-1)
n = STR_LEN-1;
len = strlen(str);
if (len < STR_LEN)
len -= 1;
row = len / n + 1;
col = n + 1;
pstr = (char **)malloc(sizeof(char *) * row + 1);
if (!pstr)
exit(0);
for (i = 0; i < row; i++) {
pstr[i] = (char *)malloc(sizeof(char) * col);
if (!pstr[i])
exit(0);
}
i = 0;
cnt = 0;
while ( i < len && str[i]) {
for (j = 0; j < n; j++)
pstr[cnt][j] = str[i+j];
pstr[cnt][j] = 0;
i += n;
cnt++;
}
for (i = 0; i < cnt; i++)
puts(pstr[i]);
/*
int n,m;
char a[100];
scanf("%d ",&n);
gets(a);
//char b[1000][n];
//char b[1000][n];
char b[100][100];
char c[100];
int len=strlen(a);
int h=0,g=0;
for(int i=0;i<len;i++){
c[h]=a[i];
h++;
if(h==n){
h=0;
strcpy(b[g],c);
// printf("%s\n",b[g]);
g++;
}
}
printf("%s\n",b[0]);
*/
return 0;
}
供參考~
呼叫strcpy的前提是c是字串,即以'\0'結束的。
建議了解一下strcpy,
另外,n是輸入的,因此不能做陣列的列數。建議用動態申請空間,還可以節省很多空間。
謝謝大佬,初學者有點難看懂哈
首先可以試一下,先看對不對。
另外,樓主還沒學習malloc、二重指標這些嗎?
去年學了一學期的c,關于malloc,指標,二重指標,老師都講的很模糊也很簡單只是稍微了解了一下,搞得后面資料結構也學的很吃力。
上面那個問題,我把b陣列列改為n+1,好像就對了哈
uj5u.com熱心網友回復:
以'\0'為結束符的字符陣列才是字串;陣列b,c都不是字串,用strcpy,%s這些操作存在問題。
為啥它們不是字串呀
不是說不是字串,只是很多函式是要依靠“\0”判斷結束的,沒有這個會導致功能例外。這就是為什么我上面說還是有點小問題。最好自己重寫strcpy這類函式
uj5u.com熱心網友回復:
以'\0'為結束符的字符陣列才是字串;陣列b,c都不是字串,用strcpy,%s這些操作存在問題。
為啥它們不是字串呀
不是說不是字串,只是很多函式是要依靠“\0”判斷結束的,沒有這個會導致功能例外。這就是為什么我上面說還是有點小問題。最好自己重寫strcpy這類函式
我把b陣列列改為n+1,好像就對了哈
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/34187.html
標籤:C語言
下一篇:有無大佬給一份答案
