Вывести все знаки раздела и их указатели в введенной строке

Не выводит то, что нужно, в общем не знаю как писать(

 #include <iostream>
 #include <string>

 using namespace std;

 int main()
 {
     setlocale(LC_ALL, "rus");
     string str;
          cin >> str;
          cout << "Символы: ";
          for (int i = 0; i < str.length(); i++) {
              while (str[i]){
             if (ispunct(str[i])){
                 cout << "str[" << i << "] = " << str[i] << endl;
             }
             i++;
         }
     }
 }

Ответы (1 шт):

Автор решения: nyekitka

А что вы считаете знаками раздела? ispunct() проверяет только знаки пунктуации. Если вы хотите проверять ещё и пробелы и табуляции, то используйте isspace(). Плюс, если в вашей строке есть пробелы, то обычный cin не пойдёт. Нужно использовать getline(). А ещё не понятно, зачем вы заводите цикл while как только встретили нужный символ внутри for и этим циклом уже проходите всю оставшуюся строку, хотя всё это можно сделать с помощью for:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    setlocale(LC_ALL, "rus");
    string symbs = ".,;:!?";
    string str;
    getline(cin, str);
    cout << "Символы: ";
    for (int i = 0; i < str.length(); i++) {
        if (symbs.find(str[i]) != -1)
            cout << "str[" << i << "] = " << str[i] << '\n';
    }
    return 0;
}
→ Ссылка