Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 删除上一个字符?_C++ - Fatal编程技术网

C++ 删除上一个字符?

C++ 删除上一个字符?,c++,C++,我试图构建一个程序,将某个字符串打印到文本文件中,我现在要做的是发出一个“如果”命令,删除前一个字符在另一个特定字符之前的内容,例如: if(character 'a' came directly before character 'b') \\"ab" delete a ; 对不起,我的代码,但我真的不知道怎么做。 谢谢。请尝试以下代码: for (int index = 0; arr[index] != '\0'; index++) { if(arr[index] == 'a'

我试图构建一个程序,将某个字符串打印到文本文件中,我现在要做的是发出一个“如果”命令,删除前一个字符在另一个特定字符之前的内容,例如:

if(character 'a' came directly before character 'b')  \\"ab"
delete a ;
对不起,我的代码,但我真的不知道怎么做。 谢谢。

请尝试以下代码:

for (int index = 0; arr[index] != '\0'; index++) 
{
    if(arr[index] == 'a' && (arr[index+1] == 'b')
        continue;
    //write char to file;
}
你需要一个计划:

  • 获取字符串
  • 处理它
  • 获取要在其中输出的文件的名称
  • 把绳子扔在那里
首先,有一些合理的选择:对程序中的字符串进行硬编码,并对文件名进行硬编码

因此,我们只剩下加工和倾销:

  • 处理:使用、查找
    at()
    方法和
    erase
    方法(使用位置,而不是迭代器)

  • 转储:使用,查找其构造函数(采用文件名)并使用
    ,可能会有所帮助

    int main(void)
    {
        char* str = malloc(strlen("abcdef")+1);
        strcpy (str, "abcdef");
        removeChar (str, 'b');
        printf ("%s", str);
        free (str);
        return 0;
    }
    
    结果:

    acdef

    检查以下链接

    http://stackoverflow.com/questions/5457608/c-remove-character-from-string
    http://www.dreamincode.net/forums/topic/63164-removing-character-from-string/
    
    #包括“stdafx.h”
    #包括
    #包括
    #包括
    使用名称空间std;
    int _tmain(int argc,_TCHAR*argv[]
    {
    字符串测试=“asdfabasdabab”;
    regex reg(“.b”);
    test=regex_替换(test,reg,“b”);
    
    cout这听起来像是一个简单的搜索和替换:替换
    “ab”
    “b”
    一起使用。我通常使用的函数是:

    std::string
    replaceSequence(
        std::string const& original,
        std::string const& from,
        std::string const& to )
    {
        std::string results;
        std::string::const_iterator start = original.begin();
        std::string::const_iterator end = original.end();
        std::string::const_iterator next
            = std::search( start, end, from.begin(), from.end() );
        while ( next != end ) {
            results.append( start, next );
            results.append( to.begin(), to.end() );
            start = next + (to.end() - to.begin());
            next = std::search( start, end, from.begin(), from.end() );
        }
        results.append( start, next );
        return results;
    }
    
    如果你正在做大量的文本,它是一个有用的函数
    处理。

    除了伪代码,你还有其他代码要显示吗?你已经尝试了什么?你尝试了什么吗?什么不起作用?好的,我已经在过去12小时内写了1575行代码。所以不要试图让我感到内疚,如果你能帮我,谢谢你,这与用
    替换每个
    “ab”
    有什么不同“b"
    ?只需使用标准的搜索和替换习惯用法。我正在完成我的1575行程序,但我没有使用数组,我在其中使用了字符串,这个问题我请求帮助是紧急的,但无论如何,谢谢你宁愿使用
    std::vector
    ,而不是数组。另外
    std::string
    可以像数组一样索引。这不是错误的代码,howe在教学安全C++之前,我们应该避免教别人不安全的C++席:我只想删除这个字符,除非它是在不删除整个文本之前,谢谢你,我只是想删除这个字符,除非它在没有删除整个文本之前。感谢you@user3487485您说过需要删除“b”之前的字符,在我的示例中,第一个“a”没有被删除,因此…@user3487485输出为“asdfbasdbb”-删除了“b”之前的每个“a”。怎么了?“\u TCHAR”没有被删除declared@user3487485添加了简化的解决方案
    std::string::at()非常罕见
    是合适的。通常,边界错误是错误,而不是异常。@JamesKanze:correction first,performance second:)
    std::string::at()
    只有在边界错误是异常但正确的情况下才是正确的。在我使用的所有实现中,
    std::string::operator[]
    将在边界错误时崩溃,这是所需的行为。@JamesKanze:我很惊讶看到您期望在未定义的行为操作上崩溃;经验表明您可能只是读取垃圾…我的经验表明您会崩溃。至少,在VC++和g++的调试版本中都是这样。
    #include <string>
    #include <regex>
    #include <iostream>
    
    int main()
    {
        std::string test = "asdfabasdabab";
        std::regex reg("ab");
        test = regex_replace(test, reg, "b");
        std::cout << test << std::endl;
    }
    
    #include <fstream>
    
    std::ofstream out("output.txt");
    out << test;
    out.close();
    
    std::string
    replaceSequence(
        std::string const& original,
        std::string const& from,
        std::string const& to )
    {
        std::string results;
        std::string::const_iterator start = original.begin();
        std::string::const_iterator end = original.end();
        std::string::const_iterator next
            = std::search( start, end, from.begin(), from.end() );
        while ( next != end ) {
            results.append( start, next );
            results.append( to.begin(), to.end() );
            start = next + (to.end() - to.begin());
            next = std::search( start, end, from.begin(), from.end() );
        }
        results.append( start, next );
        return results;
    }