当前位置:  开发笔记 > 编程语言 > 正文

在C++中转换字符串中特定字符的简单方法?

如何解决《在C++中转换字符串中特定字符的简单方法?》经验,为你挑选了1个好方法。

如果我有字符串.....ZZ..ZZ......Z.1.Z.23Z.4.Z55,

是否有一种简单的方法可以将Z字符串中的所有字符移动到当前位置右侧的一个空格中?

一些额外的测试字符串是:

.Z

Z.

ZZ.

.ZZ

Z

ZZ

ZZZ

我认为这个问题的一些较高的投票答案(包括目前接受的答案)不适用于这些测试.



1> John Milliki..:

只需遍历文本并交换字符:

int main ()
{
    char text[] = "...Z.Z.Z...", temp;
    int text_len = strlen (text), i;
    for (i = text_len - 1; i >= 0; i--)
    {
        if (text[i] == 'Z')
        {
                temp = text[i+1];
                text[i+1] = text[i];
                text[i] = temp;
        }
    }
    printf ("%s\n", text);
    return 0;
}

生产:

[~]$ gcc zshift.c && ./a.out
....Z.Z.Z..

关于上述代码中可能出现的1个错误的评论中有很多讨论.但是,简单的测试/单步测试足以表明情况并非如此.

zshift "Z." -> ".Z"
zshift ".Z" -> "."
zshift "Z" -> ""

我认为当从弦的末端移开时"掉落"尾随Z的行为是明智的.毕竟,如果移位整数的位,则会丢弃最终超出整数范围的位.

如果需要另一种行为 - 例如,仅在字符串内移位 - 对算法的更改最小:

temp = text[i+1];
if (temp == 0) continue;
text[i+1] = text[i];
text[i] = temp;

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有