ispunct()不检测单引号字符

时间:2017-08-31 05:03:31

标签: c++

我正在尝试读取文件并从文件中删除所有标点符号。我一直在使用ispunct()迭代字符串并检查字符是否是标点符号,但它似乎没有捕获所有标点符号。我想知道我做错了什么。这是我的代码:

2.txt

你好吗?

我很好,谢谢。

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;

//removes punctuation, numbers, and extra spaces
void removeNonAlph(string &tmp)
{
     for(int i = 0; i < tmp.length(); i++)
     {
         if (ispunct(tmp[i]))
             tmp.erase(i--, 1);
         else if (isdigit(tmp[i]))
             tmp.erase(i--, 1);
         else if ((tmp[i] == ' ') && (tmp[i+1]) == ' ')
             tmp.erase(i--, 1);
     }
 }

int main(int argc, const char * argv[]) 
{

    ifstream file("2.txt");
    string tmp;
    string words[500];

    while (getline(file, tmp))
    {
        removeNonAlph(tmp);
        toLower(tmp);
        cout << tmp << endl;
    }

    file.close();
}

输出:

你好吗

我很感谢

1 个答案:

答案 0 :(得分:4)

(评论为了便于未来读者的发现而回答)

注意编辑器将非ASCII引号放入文本文件中。许多编辑器生成“智能引号”,通过使用不同的非ASCII字符代码呈现不同的左右引号,看起来更好。 return data.music.filter(function (elem) { var MatchingTitle = []; // creating a array to holding all matching values if(elem.Title.indexOf(Title)>=0){ MatchingTitle.push(elem.Title); } // var expTitle = Title.indexOf(elem.Title) >= 0; // var expTitle = elem.Title.toUpperCase().indexOf //(Title.toUpperCase()) >= 0; return MatchingTitle.join(''); // use this }); alert(properties.length); $("#cover").html("<img src=\" " + properties[0].Poster + " \" alt=\"\" width=\"100\">"); $("#folder").text(properties[0].Folder); $("#subfolder").text(properties[0].SubFolder); 通常仅适用于ASCII输入。