C ++ find返回字符串变量文本中的最后一个单词。 string getFirstWord(text)

时间:2011-10-21 18:27:08

标签: c++

我试图转到字符串的末尾,然后返回到最后一个空格,然后继续前进到单词的结尾并将该单词存储在空字符串中。不允许使用数组或指针。

string getLastWord(string text)
{
    string lastword="";
    int last=text.size()- 1;
    int beginlast=0;
    if text == "";
    return  "";
    for (int i=last; i>=1; i--)
    {
        if (isspace(text[i]))
            beginlast=beginlast+i;
    }
    for (int k=0; k!=text.size; k++)
    {
        if (isalpha(text[k]))
            lastword=lastword+lastword[k];
    }
    return lastword;
}

4 个答案:

答案 0 :(得分:7)

你看过函数

了吗?
string.find_last_of( ' ' );

答案 1 :(得分:1)

'AndersK' 的方法非常好。但是如果字符串末尾有空字符怎么办: string text{" my big and long string "}; ? 该代码不返回任何最后一个字。

所以我在想... - 为什么不用已经使用过的相同方式检查最后一个字符。然后逐个字符地向后移动,直到找到最后一个单词的字符。然后使用某人已经编写的代码倒退。所以我完成了这个代码块并做了一个函数:

string Last_str_word(const string& text)
{
    int i = text.length() - 1;
    
    if (isspace(text[i]))
        while (isspace(text[i])) i--;
    
    while (i != 0 && !isspace(text[i])) --i;
    
    string lastword = text.substr(i + 1);
    return lastword;
}

它可以工作,您不必担心末尾是否有空字符。它仍然会返回最后一个字。

答案 2 :(得分:0)

也许是这样的。我们先从末端剪掉空格。如果你想考虑其他类型,如果可忽略的空格,你可以简单地扩展它。

std::string input; // your data

std::size_t pos = input.size();
while (input[pos] == ' ' && pos > 0) --pos;

if (pos == 0) { /* string consists entirely of spaces */ }

std::string result = input.substr(input.find_last_of(' ', pos));

手动完成:

std::string input; // your data
std::size_t pos = input.size();
while (input[pos] == ' ' && pos > 0) --pos;

if (pos == 0) { /* string consists entirely of spaces */ }

const std::size_t pos_end = pos;
while (input[pos] == ' ' && pos > 0) --pos;

std::string result = input.substr(pos, pos_end - pos);

答案 3 :(得分:0)

#include<iostream>
#include<string.h>
using namespace std;

int main()
{
    int l,d,i;
    char a[100];
    cout<<"Enter the string: "<<endl;
    gets(a);
    l=strlen(a);

    for(i=0;a[i]!=0;i++)
    {
        if(a[i]==' ')
        d=i;
    }
    cout<<endl;
    cout<<"The last word of the string:"
    for(i=d+1;a[i]!=0;i++)
    {
       cout<<a[i];
    }

    return 0;
}