printf("Type something:\n");
char str[buffSize];
fgets(str, buffSize, stdin);
char key[] = " .,?=+";
char* word = strtok(str, key);
while (word != NULL) {
puts(word);
word = strtok(NULL, key);
}
return 0;
}
поясните недалёкому, почему этот код функционирует шедврально, а этот
#include <stdio.h>
#include <string.h>
const int buffSize = 256;
const char key[] = " .,;\t\n";
int palindrom(char* word) {
int len = strlen(word);
int len_ = len / 2;
int res = 1;
for (int i = 0; i < len_; i++) {
if (word[i] != word[len - 1 - i]) {
res = 0;
break;
}
}
return res;
}
void wordRepeat(char* initWord, char* str) {
char tmp_str[buffSize];
strcpy(tmp_str, str);
char* word = strtok(tmp_str, key);
int counter = 0;
while (word != NULL) {
if (strstr(word, initWord) != NULL) {
counter++;
}
word = strtok(NULL, key);
}
printf("The word '%s' repeats\t\t%d times!\n", initWord, counter);
}
void deleteRepeatsAndCopy(char* word) {
}
void doAlphabeticOrder(char* word) {
}
int main () {
printf("Type something:\n");
char str[buffSize];
fgets(str, buffSize, stdin);
char str_buf[buffSize];
strncpy(str_buf, str, buffSize);
char* word = strtok(str_buf, key);
int pal_counter = 0;
while (word != NULL) {
pal_counter += palindrom(word);
wordRepeat(word, str);
word = strtok(NULL, key);
}
printf("The string has\t\t\t%d palindromes!\n", pal_counter);
return 0;
}
не хочет?
я подебажил и обнаружил, что когда выполняется строка word = strtok(NULL, key); то word имеет мусор какой-то, буд-то оно ломает кодировку у следующего токена или что, и вместо, к примеру, word = " ma" получается word = "\033@(��\177" (эта фигня в цикле получается)
А какие символы поступают на вход, какой алфавит?
английская раскладка, hay ma !! d "' ./ sa
Обсуждают сегодня