假设字符串为“Hello World”,n 是一个整数,表示将要输入的字符串的索引,其中 n 为 2。
输入n后,我只想打印从n索引到末尾的字符串,这里是“llo World”。
如何在不使用循环的情况下只获取“llo World”部分(这是我能想到的唯一解决方案)?
更多示例:
n = 4 字符串=“对不起”
输出:“抱歉”
n = 3 字符串=“我需要这个”
输出:“需要这个”
正如我上面所说,我尝试使用循环的方法,但我需要一种更有效的方法来执行此操作,对于尺寸巨大的字符串,使用循环将花费太长的时间。
总结我的问题:
如何在不使用循环的情况下从第 n 个索引打印字符串。
我就是这样做的:
#include <iostream>
#include <string>
int main() {
int n;
std::string s;
std::cin >> n >> s;
for(int i = 0; i < n; i++) {
std::cout << s[i];
}
return 0;
}
您可以使用
std::string_view
查看原始字符串而不对其进行修改。然后您可以根据需要调整该视图。
这是一种方法:
#include <string>
#include <string_view>
#include <iostream>
#include <iomanip>
#include <cstddef>
#include <cstdlib>
int main()
{
std::cout << "Please enter the string (in double quotes) and the index: ";
std::string str;
std::size_t n;
std::cin >> std::quoted(str) >> n;
if (std::cin.fail())
{
std::cout << "Invalid input.\n";
return EXIT_FAILURE;
}
if ( n > std::size(str) ) // handling the potential error
{
std::cout << "Error: Entered index is greater than the size of the string.\n";
return EXIT_FAILURE;
}
std::string_view original_view { str };
std::string_view modified_view { original_view.substr(n) };
std::cout << "Original string: " << std::quoted(original_view) << '\n'
<< "New string view: " << std::quoted(modified_view) << '\n';
}
例如,输入 “嗨,那里!” 2 作为输入,您将得到 ", There!" 这正是您想要的。
您可以将整数
n
添加到 char*
。
int main()
{
auto n = 4;
auto string = "I am sorry";
std::cout << string + n;
}
输出
sorry
cin.write()
方法,向其传递一个指向起始字符的 char*
指针,以及要写入的字符数,例如:
#include <iostream>
#include <string>
int main() {
int n;
std::string s;
std::cin >> n >> s;
std::cout.write(s.c_str()+n, s.size()-n);
return 0;
}
std::string_view
,例如:
#include <iostream>
#include <string>
#include <string_view>
int main() {
int n;
std::string s;
std::cin >> n >> s;
std::string_view sv = s;
sv = sv.substr(n);
// or: std::string_view sv(s.c_str()+n, s.size()-n);
// or: std::string_view sv(s.begin()+n, s.end());
std::cout << sv;
return 0;
}
@Drew Dormann 已经提供了正确的答案.. 如果您不想使用 STL (std::string),那么您可以使用普通指针算术。
#include <iostream>
int main () {
char pData[] = "Hello World";
int n = 6;
int array_length = sizeof(pData)/sizeof(pData[0])-1;
if(n < array_length)
{
char *pData_from_n_to_end = pData + n;
std::cout<<pData_from_n_to_end<<std::endl;
}
else
{
std::cout<<"You cannot move past the end of the string";
}
return 0;
}