Возможно, мой код не работает, но любые символы пробела (\ n, \ t, \ r и т. Д.) Не преобразуются в пробел "". Насколько я могу судить, похоже, что он должен работать, но он seg неисправен каждый раз, когда он попадает в новую строку.isspace работает неправильно?
Редактировать: Извините, он меняет символы белого пространства на '', но он останавливается после того, как наступила новая строка. Затем программа запускает код до тех пор, пока это новое пятно линии - где это произойдет.
Он также не заменит никаких белых пространств.
Код рисуется в TXT-файле, поэтому, если вы хотите его запустить, создайте текстовый файл с именем alice.txt (или вы можете изменить код) и введите пробелы в файл.
Не могли бы вы помочь мне, я пытался решить это часами безрезультатно. Что я делаю не так? Благодаря!
#include <stdio.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#define LEN 4096
void upper(char *tok, FILE *out);
void rstrip(char *tok, FILE *out);
int main()
{
char *tok; //tokenizer
char buf[LEN];
FILE *in = fopen("alice.txt", "r");
FILE *out = fopen("out.txt", "w");
int len = 0;
while (fgets(buf, LEN, in)) {
/* cleans all line breaks, tabs, etc, into space*/
while (buf[len]) {
printf("%c", buf[len]); //Error checking, prints each char of buf
if (isspace(buf[len])) //isspace not working properly? not changing \t, \r, etc to ' ' */
buf[len] = ' '; //not replacing
if (buf[len] < 0) //added cuz negative character values were being found in text file.
buf[len] = ' ';
len++;
}
/*parses by words*/
tok = strtok(buf, " ");
rstrip(tok, out);
while (tok != NULL) {
tok = strtok(NULL, " ");
rstrip(tok, out);
}
}
fclose(in);
fclose(out);
return 0;
}
/*makes appropiate words uppercase*/
void upper(char *tok, FILE *out)
{
int cur = strlen(tok) - 1; //current place
while (cur >= 0) {
tok[cur] = toupper(tok[cur]);
printf("%s\n", tok);
fprintf(out, "%s", tok);
cur--;
}
}
/*checks for 'z' in tok (the word)*/
void rstrip(char *tok, FILE *out)
{
int cur = strlen(tok) - 1; //current place
printf("%s", tok);
while (cur >= 0) {
if (tok[cur] == 'z')
upper(tok, out);
cur--;
}
}
вы должны intialise переменной Len обратно в 0 после первого цикла также начать использовать отладчик – 999k
Вашего второго 'strtok' (один с 'NULL') должен быть * после * вызова' rstrip', в противном случае вы пропускаете первый токен (и не завершаете цикл должным образом). И 'isspace' работает отлично. Причины любых проблем, – ooga
'if (buf [len] <0)' это может произойти только в том случае, если 'FILE * in = fopen (" alice.txt "," r ");' failed.Убедитесь, что файл открыт перед чтением. (например, 'if (! in) {printf (" error: open failed \ n "; return 1;}'. Это предотвратит чтение ** странных ** символов из текстового файла. Сделайте то же самое для 'out' до написания. –