【问题标题】:Replace accentuated vowels with common vowels in c++用 C++ 中的普通元音替换重读元音
【发布时间】:2021-08-05 00:25:10
【问题描述】:

我有一个带有西班牙语文本的字符串,我想像这样替换某些字符:

character replace-with:
á a
é e
í i
ó o
ú u
ñ n

我试过这个没有结果:

std::string RemoverTildes(std::string str){
    std::string sinTildes = str.c_str();
    for(int i = 0; i < str.length(); i++){
        if(sinTildes[i] == 'á'){
            sinTildes[i] = 'a';
        } else if(sinTildes[i] == 'é'){
            sinTildes[i] = 'e';
        } else if(sinTildes[i] == 'í'){
            sinTildes[i] = 'i';
        } else if(sinTildes[i] == 'ó'){
            sinTildes[i] = 'o';
        } else if(sinTildes[i] == 'ú'){
            sinTildes[i] = 'u';
        } else if(sinTildes[i] == 'ñ'){
            sinTildes[i] = 'n';
        }
    }
    return sinTildes;
}

我怎样才能做到这一点?有什么图书馆或什么东西可以用来做吗?

【问题讨论】:

  • 什么是字符编码?您需要一个单字节字符集才能对字符串的各个字节进行比较,并且您的源代码编辑器必须使用相同的单字节字符集。如果您在(例如)UTF-8 文本编辑器中编辑您的 C++ 代码,那么您正在比较的那些字符文字将不是您所期望的。如果您的输入数据是 UTF-8,您需要查找字节序列而不是单个字节。

标签: c++ string char


【解决方案1】:

您可以使用 Unicode (UTF-16LE) wchar_t 来处理此字符。您可以阅读更多关于char 类型here 的信息。

这是带有使用示例的代码。

#include <iostream>

void tildesRemover(wchar_t* wideString) {
  auto stringLen = sizeof(wideString);
  for (int i = 0; i < stringLen; i++){
    if (wideString[i] == L'á'){
      wideString[i] = 'a';
    } else if (wideString[i] == L'é'){
      wideString[i] = 'e';
    } else if (wideString[i] == L'í'){
      wideString[i] = 'i';
    } else if (wideString[i] == L'ó'){
      wideString[i] = 'o';
    } else if (wideString[i] == L'ú'){
      wideString[i] = 'u';
    } else if (wideString[i] == L'ñ'){
      wideString[i] = 'n';
    }
  }
}

int main() {
  wchar_t wideString[] = L"áíéíúñó";

  tildesRemover(wideString);

  std::wcout << wideString << std::endl;

  return 0;
}

L 这里指定wchar_t

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多