#include <stdio.h>
#include <time.h>
#include <string.h>
char* matrix [10][10];
int main(void){
int i;
char* list[4];
char* words[][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;
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( i=0;i<4;i++){
printf( "\n%d",i );
d=0;
do{
random = (rand()%20);
list[i]=words[0][random];
d=0;
for( j=0;j<i;j++){
if(strcmp(words[0][random],list[j])==0)d=1;
}
}while(d);
}
token = strtok((words[0][random]),search);
while(token!=NULL)
{
length=strlen(words[0][random]);
for( k=0;k<length;k++){
matrix [i][k]=token;
token = strtok(NULL, search);
matrix [i][k]=token;
}
}
for(r=0;r<10;r++){
printf("\n");
for(s=0;s<10;s++){
//ans=strlen(matrix[r][s]);
/*if(ans==0){
c= 'A' + (rand() % 26);
matrix[r][s]=c;
}*/
printf("\t%s",matrix[r][s]);
}}
getchar();
return 0;
}
в основном это мой код. он компилируется нормально, но strtok генерирует исключение во время выполнения. хотелось бы исправить мою ошибку, спасибо, этот код предназначен для выбора случайных 4 слов, которые не повторяются, и strtok используется для их разделения для ввода в матрицу, но это все еще не работает, даже если получен ответ. он не показывает правильный результат
"like so"
, аstrtok
пытается изменить свою исходную строку. (Он помещает нулевые терминаторы в конце токенов.) Вы можете либо сделать строки модифицируемыми массивами символов, либо вы должны использовать неразрушающий токенизатор. - person M Oehm   schedule 02.12.2015" c a t "
. Вам не нужна токенизация, если вы храните слова обычным способом,"cat"
, а затем получаете доступ к символам по отдельности. Гораздо проще. (Однако вы получите символы, а не строки. Символы поддаются легкому сравнению и, вероятно, здесь вам нужны. Однако имейте в виду разницу.) - person M Oehm   schedule 02.12.2015char
s, т.е. одиночные символы, где ваш код использует однобуквенные строки типа char *. For example, your matrix should be
char matrix[10][10], your word list
char words[][20]`. - person M Oehm   schedule 02.12.2015