gpt4 book ai didi

string - gnuplot - 将字符串变量转换为小写

转载 作者:行者123 更新时间:2023-12-01 12:19:08 25 4
gpt4 key购买 nike

如何在 gnuplot 中将字符串转换为小写?
这是一个 gnuplot 字符串处理问题。

示例:- 我想在 gnuplot 脚本中检查用户输入的参数....

if (tolower(ARG2) == "ohms") {.....

所以接受“ohms”、“Ohms”或“OHMS”。

首选是不需要使用外部“系统”命令,以便脚本更便携。我目前最好的解决方案是

  arg2 = system("awk 'BEGIN { print toupper(\"".ARG2."\") }'")

然后测试新的字符串变量“arg2”,但 awk(或其他程序)在非 unix 系统上可能普遍不可用,这使得 gnuplot 脚本的可移植性较差。

我看不到任何修改字符串表示的增强型 gprintf % 格式说明符 - 似乎 gprintf 仅用于转换值。

最佳答案

全功能宏解决方案(感谢 theozh)让我再次思考如何将其实现为一个功能。使用查找表通过使序数相等来转换字符的想法是个好主意。将单个字符大小写转换封装到一个函数中是开始,然后随着递归,它使得处理完整字符串成为可能,就像我最初寻找的那样。我希望现在这对所有人来说都是一个整洁的解决方案。分享和享受。

# GNUPLOT string case conversion
# string_case.gnu M J Pot, 14/1/2019

# Index lookup table strings
UCases="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCases="abcdefghijklmnopqrstuvwxyz"

# Convert a single character
# Char to convert is added to string so it is always found to default other chars
toupperchr(c)=substr( UCases.c, strstrt(LCases.c, c), strstrt(LCases.c, c) )
tolowerchr(c)=substr( LCases.c, strstrt(UCases.c, c), strstrt(UCases.c, c) )

# Convert whole strings
# Conversion first char (or return null), and recurse for the remaining
toupper(s) = s eq "" ? "" : toupperchr(s[1:1]).toupper(s[2:*])
tolower(s) = s eq "" ? "" : tolowerchr(s[1:1]).tolower(s[2:*])

添加:改进的解决方案

这是作为自包含函数的递归大小写转换的重新工作。多一点努力已经解决了第一个解决方案的过度堆栈使用。当我遇到问题时,我只是在考虑单个单词的字符串。注意:- 单个字符转换变得更加可靠。

# GNUPLOT string case conversion
# string_case.gnu M J Pot, 29/1/2019
# toupper(), tolower() functions

# Index lookup table strings
UCases="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCases="abcdefghijklmnopqrstuvwxyz"

# Convert a single character
# Char to convert is added to string so it is always found to default other chars
# Null strings are returned null
toupperchr(c)= c eq "" ? "" : substr( UCases.c, strstrt(LCases.c, c), strstrt(LCases.c, c) )
tolowerchr(c)= c eq "" ? "" : substr( LCases.c, strstrt(UCases.c, c), strstrt(UCases.c, c) )

# Divide & conquer
# A simple linear recursive call uses too much stack for longer strings.
# This undertakes a binary tree division to make the stack growth order log_2(length)
toupper(s) = strlen(s) <= 1 ? toupperchr(s) : toupper( substr(s,1,strlen(s)/2) ) . toupper( substr(s,(strlen(s)/2)+1,strlen(s)) )
tolower(s) = strlen(s) <= 1 ? tolowerchr(s) : tolower( substr(s,1,strlen(s)/2) ) . tolower( substr(s,(strlen(s)/2)+1,strlen(s)) )

关于string - gnuplot - 将字符串变量转换为小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45806917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com