如何交替交换大写和小写?

2023-12-05

我正在编写一个程序,可以将大写字母转换为小写字母,也可以将小写字母转换为大写字母。这里有些例子。

abcde -> aBcDe

ABCDE -> aBcDe

abCdE -> aBcDe

我知道如何用 c 语言编写它,但不知道如何用 shell 脚本编写它。这是c代码。

  1 #include <stdio.h>
  2 #include <ctype.h>
  3 #include <stdlib.h>
  4 #include <string.h>
  5 
  6 int main(int args, char* argv[])
  7 {
  8 
  9     if(args != 2)
 10         exit(1);
 11     char buf[100];
 12     for(int i = 0; i < strlen(argv[1]); i++)
 13     {
 14         if(i%2 == 0)
 15             buf[i] = tolower(argv[1][i]);
 16         else
 17             buf[i] = toupper(argv[1][i]);
 18     }
 19     printf("%s\n", buf);
 20 }

你们能帮我如何用shell脚本编写它吗? 谢谢。


With sed您可以重复解析 2 个字符,将第一个字符更改为小写,将第二个字符更改为大写。这看起来不错,但是带有奇数个字符的字符串的最后一个字符怎么样?
首先将最后一个字符更改为小写。对于奇数长度的字符串来说这是可以的,对于偶数长度的字符串将使用第二个命令进行修改:

if [ $# -ne 1 ]; then
   exit 1
fi
lastcharlow=$(sed -r "s/(.)$/\l\1/" <<< "${1}")
sed -r "s/(.)(.)/\l\1\u\2/g" <<<"${lastcharlow}"

最后两行可以合并:

sed -r "s/(.)$/\l\1/; s/(.)(.)/\l\1\u\2/g" <<<"${1}"

编辑:下面的文字

sed 解决方案很好而且简短,但没有显示如何循环遍历字符串。当您确实不知道适合您的工具时,您可以循环遍历字符串。 我将展示 3 种更改 char 大小写的方法和两个循环字符串的函数。

function upper {
   # tr '[:lower:]'  '[:upper:]' <<< $1
   # echo "${1^^}"                     
   typeset -u up; up="$1"; echo "${up}" 
}                                       

function lower {
   # tr '[:upper:]'  '[:lower:]' <<< $1
   # echo "${1,,}"                     
   typeset -l low; low="$1"; echo "${low}" 
}                                          

function grepsolution {
   i=0
   while read -r onechar; do
      (( i++ ))
      if [[ $((i%2)) = 0 ]] ; then
          printf "%s" $(upper "${onechar}" )
      else
          printf "%s" $(lower "${onechar}" )
      fi
   done < <(echo $1 | grep -o .)
   printf "\n"
}

function substr_solution {
   i=0
   while [ $i -lt ${#1} ]; do
      (( i++ ))
      if [[ $((i%2)) = 0 ]] ; then
          printf "%s" $(upper "${1:i-1:1}" )
      else
          printf "%s" $(lower "${1:i-1:1}" )
      fi
   done
   printf "\n"
}

for teststring in abcde abcdef ABCDE ABCDEF; do
   echo "Converting ${teststring}"
   printf "%-20s: " "grepsolution"
   grepsolution "${teststring}"
   printf "%-20s: " "substr_solution"
   substr_solution "${teststring}"
done
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何交替交换大写和小写? 的相关文章

  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • shell中如何分割字符串

    我有一个变量作为 string ABC400p2q4 我怎样才能分开ABC400 and p2q4 我需要将它分成两个变量 结果我得到 echo var1 ABC400 echo var2 p2q4 可以用任何字母字符代替 ABC 可以用任
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • ggplot2:yaxis 标签未跨面对齐

    我在 ggplot 中跨面对齐轴标签时遇到一些问题 我试图左对齐所有 y 轴标签以使文本看起来更统一 但是当 scales free 参数添加到脚本中时 标签只会对齐within方面 我已经用一些虚拟代码进行了测试 并且出现了同样的问题 t
  • PHP 中两个 mysql 表的 Json

    我正在尝试从两个相关的 MySQL 表构建 json 输出 我有一个 餐厅 表和 菜肴 表 餐厅表中的每个项目在菜肴表中都有几个相关项目 这些项目由 id 引用 每个餐厅项目 ID 都是 Dishes 表中的外键 f id 例如 餐厅餐桌
  • Rails 用户个人资料页面仅可由正确的用户访问

    我正在使用设备进行身份验证 现在 我正在设置用户配置文件 我已完成所有设置 但每个页面都可供所有人访问 因此您无需登录即可查看个人资料 如何才能让只有正确的用户才能看到自己的个人资料页面 用户控制器 rb class UsersContro
  • selenium.webdriver.firefox.options - 它是关于什么的?

    我正在看这段代码 python3 from selenium webdriver import Firefox from selenium webdriver firefox options import Options opts Opti
  • 在 Asp.Net MVC 网站中维护状态

    我目前正在设计一个基于 MVC 的新网站 我想知道管理状态的正确方法是什么 状态应包含 userId 和用户信息的一些结构 并且应在用户登录时的整个会话期间保留 跨 http 请求 重要标准 1 支持可扩展性2 性能 最简单的方法是使用 S
  • Mongodb:查询文档中的数组元素

    我有一个集合想要查询如下 返回所有文件 最多 2 条评论 例如 一个切片 0 1 或 2 条评论 所有评论的观看次数必须 gt 10 似乎我需要创建一个函数来单独评估每个文档 但尚不清楚这是如何完成的 特别是考虑到我想做一个切片并返回最多
  • Apache Dbutils 在更新 Sql 中更改列名称

    我在 Dbutils 方面遇到了一个奇怪的问题 我正在尝试运行参数化更新 sql 我提供了正确数量的参数 但是 dbutils 正在通过更改修改时间戳列名称来修改它 当时间戳列名是一个字母时 java sql SQLException 参数
  • 在Python中添加持续时间

    我想在Python中添加一系列的分割 时间以 00 08 30 291 等字符串开头 我似乎找不到使用 Python 对象或 API 来使其方便 优雅的正确方法 时间对象似乎不使用微秒 因此我使用 datetime 的 strptime 成
  • 通过名称或 ID 的一部分获取元素

    这是我的表单示例 仅输入我想要的内容 但还有很多其他内容
  • 谷歌云视觉OCR支持条码读取吗?

    我正在构建一个利用谷歌云平台的 OCR 服务的应用程序 我仍在进行中 只是想知道该服务是否也可以检测条形码并对其进行解码 Thanks 不可以 要求用户有网络连接只是为了读取条形码会太过分 而且速度太慢 查看谷歌移动视觉API相反 它在设备
  • 使用asynctask调用android中的函数

    如下代码所示 我有一个名为record 我想用 asynctask 调用这个函数 但我不知道如何使用 asynctask 记录函数需要很长时间才能完成一些任务 所以我需要使用 asynctask public class Record ex
  • iOS MapKit 显示一定距离内最近的注释

    目前我正在为 iPhone iPad 开发基于位置的应用程序 我的 MapKit 中有几个注释 我想要做的是跟踪用户的位置并显示 3km 内的注释 有人可以给我一个开始吗 抱歉回复延迟了 这个问题刚刚从我的视线中消失了 我假设你有一个方法返
  • 如何从代码中获取iPhone的型号。 (例如 MC143C)

    我需要从代码中获取 iPhone 型号 我可以从我的 iPhone 中看到型号 MC143C 但是当我使用代码检索它时 它返回 iPhone 这是我用来获取型号的代码 NSLog model UIDevice currentDevice m
  • WCF 错误:客户端和服务绑定可能不匹配?

    让我们看看服务器配置和客户端配置 然后帮我找出这些配置之间的区别 客户端配置
  • 如何模仿模板变量声明

    我有一个基本类型Item
  • 从包含 标签的 Java 字符串中提取 url [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我想提取以下字符串 http www 01net com images article mea 150 100 790233 jpg 该字符串是以下 Java 字符串中第一个元素标记
  • 如何在网络表单中包含部分视图

    我正在编程的一些网站同时使用 ASP NET MVC 和 WebForms 我有一个部分视图 我想将其包含在网络表单中 部分视图有一些必须在服务器中处理的代码 因此使用 Response WriteFile 不起作用 它应该在禁用 Java
  • Django 动态 urlpatterns

    我正在构建一个简单的网络应用程序Django 我的用户被分为多个组 例如Group A Group B etc 我想做的是动态更新urlpatterns列出在urls py这样我就可以拥有相同 url 端点上的不同视图 例如 我想做这样的事
  • 动态调整弹出窗口大小时防止动画

    所以我自己意识到了这一点 并找到了这个答案来证实 防止 contentSizeForViewInPopover 产生动画效果 基本上我处于类似的情况 我想动态调整弹出窗口的大小 具体取决于我必须显示的数据量 我还得到了弹出视图移动到位的动画
  • 如何交替交换大写和小写?

    我正在编写一个程序 可以将大写字母转换为小写字母 也可以将小写字母转换为大写字母 这里有些例子 abcde gt aBcDe ABCDE gt aBcDe abCdE gt aBcDe 我知道如何用 c 语言编写它 但不知道如何用 shel