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
- 转储:使用,查找其构造函数(采用文件名)并使用
,可能会有所帮助
结果: acdef 检查以下链接int main(void) { char* str = malloc(strlen("abcdef")+1); strcpy (str, "abcdef"); removeChar (str, 'b'); printf ("%s", str); free (str); return 0; }
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行代码。所以不要试图让我感到内疚,如果你能帮我,谢谢你,这与用
?只需使用标准的搜索和替换习惯用法。我正在完成我的1575行程序,但我没有使用数组,我在其中使用了字符串,这个问题我请求帮助是紧急的,但无论如何,谢谢你宁愿使用替换每个
有什么不同“b"“ab”
,而不是数组。另外std::vector
可以像数组一样索引。这不是错误的代码,howe在教学安全C++之前,我们应该避免教别人不安全的C++席:我只想删除这个字符,除非它是在不删除整个文本之前,谢谢你,我只是想删除这个字符,除非它在没有删除整个文本之前。感谢you@user3487485您说过需要删除“b”之前的字符,在我的示例中,第一个“a”没有被删除,因此…@user3487485输出为“asdfbasdbb”-删除了“b”之前的每个“a”。怎么了?“\u TCHAR”没有被删除declared@user3487485添加了简化的解决方案std::string
是合适的。通常,边界错误是错误,而不是异常。@JamesKanze:correction first,performance second:)std::string::at()非常罕见
只有在边界错误是异常但正确的情况下才是正确的。在我使用的所有实现中,std::string::at()
将在边界错误时崩溃,这是所需的行为。@JamesKanze:我很惊讶看到您期望在未定义的行为操作上崩溃;经验表明您可能只是读取垃圾…我的经验表明您会崩溃。至少,在VC++和g++的调试版本中都是这样。std::string::operator[]
#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; }