Как я могу прочитать строку без пунктуации с помощью scanf ()? - PullRequest
0 голосов
/ 25 января 2020

Я написал этот код, но он не избегает пунктуации.

   string str;
   char ch[100];
   while(scanf("%s[a-z | A-Z ]",ch)!=EOF) 
   {
        str=ch;
        cout<<str<<endl;
   }

Когда я даю следующий ввод:

 road.sign read:
 went home.

Он печатает следующий вывод:

road.
sign
read:
went
home.

Есть ли способ улучшить этот код для печати слово без знаков препинания?

Ответы [ 2 ]

3 голосов
/ 25 января 2020

Решением может быть сохранение всего предложения, а затем удаление символов пунктуации с заменой регулярного выражения.

#include <iostream>
#include <regex>

using namespace std;

int main() {

    std::string str;
    std::regex reg(R"([.,\/#!$%\^&\*;:{}=\-_`~()])");

    while(scanf("%s", str)!=EOF)
    {

        // Remove punctation
        str = regex_replace(str, reg, "");

        std::cout<<str<<std::endl;

    }

}
0 голосов
/ 25 января 2020

Я получил пример из GeeksforGeeks Tutorial , чтобы удалить символ из char строки в C ++:

#include <bits/stdc++.h> 
using namespace std; 

void removeChar(char *s, int c){ 

    int j, n = strlen(s); 
    for (int i=j=0; i<n; i++) 
       if (s[i] != c) 
          s[j++] = s[i]; 

    s[j] = '\0'; 
} 

int main() 
{ 
   char s[] = "geeksforgeeks"; 
   removeChar(s, 'g'); 
   cout << s; 
   return 0; 
}

Вы можете использовать removeChar() два раза ; 1. с помощью removeChar(str, '.'); и 2. с помощью removeChar(str,':') для удаления точек и двоеточий из строки.

Кроме того, вы также можете использовать его в третий раз с removeChar(str, ';'); для удаления точек с запятой.

Ваш код будет выглядеть так:

#include <bits/stdc++.h> 
using namespace std; 

void removeChar(char *s, int c){ 

    int j, n = strlen(s); 
    for (int i=j=0; i<n; i++)
    {
       if (s[i] != c)
       {
          s[j++] = s[i]; 
       }
    }

    s[j] = '\0'; 
} 

int main() 
{ 
   char ch[100];
   while(scanf("%s[a-z | A-Z ]",ch)!=EOF) 
   {
         removeChar(ch, '.'); 
         removeChar(ch, ':');
         removeChar(ch, ';');
         cout << ch << endl;
   } 

   return 0; 
}
...