显示字符串

时间:2016-09-26 04:06:02

标签: c++

我需要有关c-strings和函数的分配方面的帮助。

#include <iostream>
using namespace std;
//other functions
char display_last_nchar(char sent[], int n); // function i'm having trouble with
void main()
{
char sentence[31];
int selection, n;

do {
    cout << "Please enter a string: " << endl;
    cin.getline(sentence, 31, '\n'); //also, for me here i have to hit enter twice. How can I fix that?
    cin.ignore();
    cout << "Please make a selection: " << endl;
    //other options
    cout << "4. Display the last n character of the string " << endl;
    cout << "7. Exit" << endl;
    cin >> selection;
    cin.ignore();

    switch (selection)
    {
    case 4:
        cout << "How many characters from the end of the string "
            << "do you want to display? : " << endl;
        cin >> n;
        cin.ignore();
        if (n >= 30)
        {
            cout << "Error: too many characters" << endl;
            break;
        }
        else
        display_last(sentence, n);
        cout << sentence << endl;
        break;
    case 7:
        break;
    }
} 
    while (choice != 7);

//other functions
char display_last_nchar(char sent[], int n)
{
    for (int i = n; n > 30; i++)
    {
    sent[i]; //I know this is wrong but this is a guess that i took
    }
return sent[n];
}

我知道如何显示字符串的前n个字符。对于该功能,如果用户输入了一个名为“我的仓鼠有一个新玩具”的字符串并且他们想要显示前8个字符,它会将第8个字符后的任何字符设置为空,因此只显示“我的火腿”。

我尝试做的事情,因为设置了display_last_nchar,用户输入数字前的每个字符都为0,但所有这一切都是整个字符串为空。

有人可以向我解释一下,为了创建一个显示字符串最后n个字符的函数,我需要采取的步骤。我试过在网上和我的书中试过,但它并没有真正帮助我。

3 个答案:

答案 0 :(得分:1)

指向char的指针通常被认为是C字符串。例如,格式化输出的运算符(operator<<()这样做)。 C字符串遵循特定约定:它们由遇到的第一个空字符终止。当在期望指向对象的指针的上下文中使用数组时,它们会“衰减”到相应的对象中。

要打印n数组char的第一个sentence个字符,您只需将sentence[n]设置为null,然后再将其与输出运算符一起使用。您可以使用std::ostream的无格式输出函数write()来避免修改字符串(例如,不能修改字符串文字):

std::cout.write(sentence, n);

打印对象通常被认为是非修改操作,即我使用未格式化的输出来打印第一个n字符或者写出单个字符的内容,如使用

std::copy(sentence, sentence + n, std::ostreambuf_iterator<char>(std::cout));

要打印最后一个n字符,您需要找到字符串s的长度,确定s是否大于n,如果是,则只需在sentence + (n - s)开始打印。您可以使用格式化或未格式化的方法来编写最后n个字符。对于对称性,我使用相同的方法编写第一个n字符,但从其他地方开始。

顺便说一下,你应该总是确定你的阅读后输入是否成功,例如:

if (std::cin >> n) {
    // use n
}
else {
    // report a read failure and potentially try to recover
}

答案 1 :(得分:1)

使用C ++字符串STL。 substr方法在这里很有用。例如,输出字符串的最后n个字符

#include <bits/stdc++.h>
using namespace std;

int main() {
    string s;
    int n;
    getline(cin, s);
    cin >> n;
    if (n < s.length())
        cout << s.substr(s.length() - n) << endl;
    else
        cout << "Not enough characters\n";
    return 0;
}

<强>输入

My hamster has a new toy
5

<强>输出

w toy

答案 2 :(得分:0)

这是一个非常直截了当的问题。你有一个起点,你需要显示它直到字符串的结尾。

您可以遍历从位置n开始的字符串字符,直到您读取空值(用于指示字符串的终止)。

char *display_last_nchar(char sent[], int n)
{
  char buff[100];
  int i = strlen(sent) - n; char ch;
  while((ch = sent[i])!='\0')
  {
    strcat(buff, ch);
  }
  strcat(buff, '\0');
  return buff;
}

字符数组(或任何类型的数组)作为指针传递,因此您使用的返回类型是char指针而不仅仅是char。

此函数将返回指向存储最后n个字符的缓冲区的指针。请记住,strlen和strcat是string.h库中的函数。