假设我们在代码中得到一个字符串,
char*密码=";this\nis\myPassword">
我需要将这个字符串复制到一个文本文件中,但不是像这样出现在文件中;
该
是\ myPassword
我希望它像下面的一样出现在文件中
这是\myPassword
我尝试了一些方法,我能想到的最好的解决方案是创建一个包含所有可能的转义序列的字符数组
如果我循环遍历原始字符串并到达创建的数组中的一个字符,我会输入另一个字符来循环修改字符串。
创建阵列
实际代码
现在我遇到的问题是,如何使字符串中的下一个数字成为转义序列的第二个数字
即:用于:我想把它修改成两个字符,"\"one_answers"n"因此它表现为";\n〃;
我已经知道我的解决方案很差,可以大幅改进,所以我们非常感谢您的帮助。
要做到这一点,您必须找到n
的每个外观,并将其替换为\n
。在C中没有replace
或等效函数,因为字符串大小是固定的。我将尝试使用类似的功能。所以,首先让我们试着得到最后一个字符串的大小。要做到这一点,我们需要计算需要替换多少个字符。此函数统计字符串中有多少换行字符。
int countNewlines(char *str)
{
int i = 0;
while(*str != ' ')
if(*str++ == 'n') i++;
return i;
}
现在,我们将用总共两个字节的\n
替换其中的每一个,因此字符串的最终长度将是
int length = strlen(str) + countNewlines(str);
一旦我们有了这个长度,我们就需要找到n
的每个实例,并用\n
替换它,所以让我们在字符串上循环并创建我们的最终字符串。
char finalStr[length + 1]; // Plus one for the null terminator
for(int i = 0, j = 0; i < length + 1; i++, j++)
{
if(str[i] == 'n')
{
finalStr[j++] = '\';
finalStr[j] = 'n';
}
else
{
finalStr[j] = str[i];
}
}
finalStr[length] = ' '; // explicitly add the null terminator just in case.
printf("%s", finalStr);
演示:
当我们输入"Hellon Worldn!n"
时,控制台中的结果是
Hellon Worldn!n
可以看出,所有换行符都被替换为两字节对应的
您应该能够更改此代码并根据自己的喜好使用它。