cmd等价于std :: string :: find_first:of

时间:2017-01-07 13:17:06

标签: windows batch-file cmd substring

C ++,Java,JavaScript以及可能的其他编程语言都有一个字符串函数,可以在字符串中搜索指定字符串模式中的任何字符。例如,C ++的std::string::find_first_of就是这样的:

std::cout << "Vowel found in : " << "Search me for vowels".find_first_of("aeiou") << std::endl;
// should print "Vowel found in : 1". 

CMD中有没有相同的内容?我试着搜索“dos字符串函数”,但似乎找不到任何东西。

2 个答案:

答案 0 :(得分:2)

没有直接的方法,但你可以很容易地写自己的。

搜索一个字符

@echo off
call :charposition "Search me for vowels" a pos
echo Found a at position %pos%

goto :eof
:charposition
set "string_search=%~1"
set /a char_pos=0
:charcheck
IF %string_search:~0,1%==%2 (
endlocal & set "%3=%char_pos%"
goto :eof
)
set "string_search=%string_search:~1%"
IF "%string_search%"=="" (
set "%3=Not Found"
goto :eof
)
set /a char_pos+=1
goto :charcheck

对于多个字符:

@echo off
call :charposition "Search me for vowels" aeiou pos
echo Found vowel at position %pos%

goto :eof
:charposition
set "string_search=%~1"
set /a char_pos=0
:charcheck
echo %2|find "%string_search:~0,1%">nul
IF %errorlevel%==0 (
endlocal & set "%3=%char_pos%"
goto :eof
)
set "string_search=%string_search:~1%"
IF "%string_search%"=="" (
set "%3=Not Found"
goto :eof
)
set /a char_pos+=1
goto :charcheck

有关提取子字符串的语法的说明,请参阅http://ss64.com/nt/syntax-substring.html。如上所述,这些都是区分大小写的。

答案 1 :(得分:1)

可悲的是,你不能解释为什么输出是&#34; 1&#34;或者&#34; 1&#34;表示。

set "string=Search me for vowels"
echo %string%|findstr /i "a e i o u" >nul
echo %errorlevel%

应将errorlevel显示为0,其中&#34;找到&#34;和#34;未找到&#34;。

字符串echo作为findstr的输入。

/i使比较不区分大小写。

>nul抑制输出

"a e i o u"表示&#34;搜索其中一个字符串&#34; (空格分隔,5个要定位的字符串)

当然,这是一个微不足道的例子。来自SO上的提示或搜索示例的findstr /?会给你更多的交易技巧。