如何在不使用循环的情况下打印从索引到字符串末尾的字符串?

问题描述 投票:0回答:4

假设字符串为“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;
}
c++ string
4个回答
1
投票

您可以使用

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!" 这正是您想要的。


0
投票

您可以将整数

n
添加到
char*

int main()
{
    auto n = 4;
    auto string = "I am sorry";

    std::cout << string + n;
}

输出

 sorry

0
投票

您可以使用

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;
}

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;
   }
© www.soinside.com 2019 - 2024. All rights reserved.