Вывести 50% или половину заданной строки - PullRequest
0 голосов
/ 28 октября 2019

Предположим, я дал строку и должен напечатать точную первую половину или 50% строки в обратном порядке.

Я попытался установить strlen (s) = n / 2, но запрос: error: lvalue требуется в качестве левого операнда присваивания |.

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

int t,i,j;

char s[101],b[101];

int main()
{   
    cin>>t;
    for(i=0;i<t;i++)
    {
        cin>>s;
        int n=strlen(s)-1;
        for(i=n,j=0;i>=0;i--,j++)
           b[j]=s[i];
        strlen(b)=n/2;
        cout<<b<<"\n";
    }
}

должен распечатать первую половинустроки в обратном порядке

Ответы [ 4 ]

1 голос
/ 28 октября 2019

С std::string и std::reverse_iterator вы можете сделать

std::string get_1st_half_rev(const std::string& s)
{
    return {std::rbegin(s),
            std::rbegin(s) + (s.size() + 1) / 2};
}

Демо

0 голосов
/ 28 октября 2019

Вы можете std::reverse часть строки, которую затем можете cout::write:

std::reverse(s, s + strlen(s) / 2);
cout.write(s, strlen(s) / 2);
0 голосов
/ 28 октября 2019

Попробуйте это.

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

int t,i,j;

char s[101],b[101];

int main() {
    cin >> t;

    for(i = 0; i < t; i++) {
        cin >> s;
        int n = strlen(s) - 1;

        // Iterate only half the size of string
        for(int k = n / 2, j = 0; k >= 0; k--, j++)
           b[j] = s[k];

        cout << b << "\n";

        // Clear the contents of 'b' so that it doesn't pollute the result of next iteration
        memset(b, 0, sizeof(b)); 
    }
}
0 голосов
/ 28 октября 2019

Этот фрагмент кода

    int n=strlen(s)-1;

    for(i=n,j=0;i>=0;i--,j++)

       b[j]=s[i];

       strlen(b)=n/2;

не имеет смысла. Вместо этого вы должны написать

    int t;

    // ...

    size_t n = std::strlen( s ) / 2;

    size_t i = 0;
    for ( ; i != n; i++ )
    {

       b[i] = s[n - i - 1];
    } 
    b[i] = '\0';

И нет смысла объявлять переменные в глобальном пространстве имен, которые используются только в main

int t,i,j;

char s[101],b[101]; 

Вот демонстрационная программа

#include <iostream>
#include <cstring>

int main() 
{
    const size_t N = 101;
    char s[N] = "Mahmudul Hasan Suzan";
    char b[N];


    size_t n = std::strlen( s ) / 2;

    size_t i = 0;
    for ( ; i != n; i++ )
    {
       b[i] = s[n - i - 1];
    } 

    b[i] = '\0';

    std::cout << b << '\n';

    return 0;
}

Его выход

H ludumhaM
...