2012-04-17 10 views
1
char punct(char a[], int len) { 
    for (int i = 0; i < len; i++) { 
     if (ispunct(a[i])) 
      { return i; } 
     return -1; 
    } 
} 

Может ли кто-нибудь сказать мне, почему эта функция возвращает только -1 для каждой строки, которую я ей передаю? Я пишу программу для ввода слов из .txt-файла и вывода их (с небольшим количеством изменений) в другой .txt-файл, и мне нужно удалить знаки препинания из строк. Однако я не могу обнаружить, где пунктуация использует функцию ispunct(). Я даже написал свою собственную функцию, используя все случаи пунктуации, которые я мог себе представить, и она только возвращает -1. Это проблема с функцией здесь или строками, которые я им даю? Если необходимо показать больше моего кода, сообщите мне. Благодаря!ispunct() Функция в C++

+0

Добро пожаловать в StackOverflow! Это напрямую не связано с вашим вопросом, но вы, вероятно, хотите изменить тип возврата на 'int'. Значение '-1' может быть не представимым в типе' char'. –

ответ

7

Это потому, что если ispunct(a[0]) возвращается false, return -1 называется.

Вы должны двигаться возвращение по умолчанию вне цикла:

char punct(char a[], int len) { 
    for (int i = 0; i < len; i++) { 
     if (ispunct(a[i])) 
      { return i; } 
    } 
    return -1; 
} 

Обратите внимание, что эта функция возвращает только первый индекс пунктуации, а не все индексы. Думаю, вы рассматриваете этот случай вне функции.

Смежные вопросы