【发布时间】:2015-12-02 10:29:14
【问题描述】:
#include <stdio.h>
#include <time.h>
#include <string.h>
char* matrix [10][10];
int main(void){
int i;
char* list[4];
char words[20][20]={" c a t "," c a r "," b e a r "," s h i p "," m o u s e "," b e a t l e "," c o a t "," n e s t "," i c e "," s u g a r "," b a c o n "," f r o w n "," s m i l e "," d e a d "," f e a t h e r "," g o a t "," h e n "," j e l l y "," k o a l a "," l i p s "};
int length=0;
int num;
int k;
int m;
char otherString=0;
char c;
int j;
int s;
int r;
char test[10];
char* token;
const char *search = " ";
char* empty="";
int size;
int ans;
int x;
int y;
int pos;
int pos2;
int randRow;
int randColumn;
int chosen[10];
int random;
int d;
int ROWS = 10; // number of rows
int COLUMNS = 10; // number of columns
printf("\tA\tB\tC\tD\tE\tF\tG\tH\tI\tJ\n");
srand(time(NULL));
for(r=0;r<10;r++){
for(s=0;s<10;s++){
srand(time(NULL));
c='1';
memset(matrix,c,sizeof(matrix));
}}
for( i=0;i<4;i++){
printf( "\n%d",i );
d=0;
do{
random = (rand()%20);
list[i]=words[random];
d=0;
for( j=0;j<i;j++){
if(strcmp(words[random],list[j])==0)d=1;
}
}while(d);
printf("%s",words[random]);
token = strtok((words[random]),search);
printf("%s",token);
while(token!=NULL)
{
printf("\nrand%d",random);
length=strlen(words[(random)]);
printf("len is:%d",length);
matrix [i][0]=token;
for( k=1;k<=length;k++){
token = strtok(NULL, search);
printf("%s",token);
matrix [i][k]=token;
}
} }
for(r=0;r<10;r++){
printf("\n");
for(s=0;s<10;s++){
printf("\t%c",matrix[r][s]);
}}
getchar();
return 0;
}
因为字符是用空格分隔的,所以 strlen 将其余的标记为
垃圾。所以答案总是2。有什么想法可以解决吗?长度是 总是 2。 也许它假设空格意味着字符串的结尾?? 不知道怎么解决
【问题讨论】:
-
strlen函数查找终止空字符'\0',它不关心空格。 -
您如何显示/使用
length?您是否还显示所选单词以验证您是否在有效字符串上调用strlen?您是否包括string.h?了解更多上下文会有所帮助。 -
您的结论不正确,您声称的结果没有意义。请提供Minimal Complete and Verifiable Example,以便我们可以准确查看您正在打印的内容并重现您的结果。
-
您的代码格式/缩进...不寻常。
-
为什么?我的代码有问题吗?