LINUX.ORG.RU

История изменений

Исправление grem, (текущая версия) :

В DrWeb мы просили кандидата ДОМА! написать функцию trimRight, обрезавшую пробелы в конце строки.

Напугаю тебя таким вариантом (после прочтения пары глав K&R и урезания функции которая просто лишние пробелы выкидывает):

#include <stdio.h>

int trimRight (char *str);

int main()
{
    char str[256];

    printf("Enter string            :>>");
    int j = 0;  //j - счётчик номера символа в массиве

    while ((str[j] = getchar()) != '\n')  // чтение строки с пробелами
      ++j;
    str[j]='\0'; //добавление конца строки
    printf("Your init string        :>>%s<<\n", str);

    trimRight(str);
    printf("Your trimed-Right string:>>%s<<\n", str);

return 0;
}

int trimRight (char *str)
// Функция должна удаять пробелы в конце строки
{
int j = 0, ns=0;
char *temp = str;

while (*(temp+j) != '\0') {
    if (*(temp+j) == ' ')
        ++ns; // счётчик пробелов

    if ((ns > 0) && (*(temp+j) != ' '))
        ns =0; // обнуление счётчика пробелов

    ++j; // переход к следующему символу в строке
    }
    // Отсекание лишних пробелов в конце строки
    if ((*(temp+j) == '\0') && (ns > 0))
        *(temp+j-ns)='\0';
return 0;
}

Только я не понял, желательно чтобы функция сохраняла оригинальную строку или резала её окончательно и бесповоротно как здесь?

Исправление grem, :

В DrWeb мы просили кандидата ДОМА! написать функцию trimRight, обрезавшую пробелы в конце строки.

Напугаю тебя таким вариантом (после прочтения пары глав K&R и урезания функции которая просто лишние пробелы выкидывает):

#include <stdio.h>

int trimRight (char *str);

int main()
{
    char str[256];

    printf("Enter string         :>>");
    int j = 0;  //j - счётчик номера символа в массиве

    while ((str[j] = getchar()) != '\n')  // чтение строки с пробелами
      ++j;
    str[j]='\0'; //добавление конца строки
    printf("Your init string     :>>%s<<\n", str);

    trimRight(str);
    printf("Your trimed-Right string:>>%s<<\n", str);

return 0;
}

int trimRight (char *str)
// Функция должна удаять пробелы в конце строки
{
int j = 0, ns=0;
char *temp = str;

while (*(temp+j) != '\0') {
    if (*(temp+j) == ' ')
        ++ns; // счётчик пробелов

    if ((ns > 0) && (*(temp+j) != ' '))
        ns =0; // обнуление счётчика пробелов

    ++j; // переход к следующему символу в строке
    }
    // Отсекание лишних пробелов в конце строки
    if ((*(temp+j) == '\0') && (ns > 0))
        *(temp+j-ns)='\0';
return 0;
}

Только я не понял, желательно чтобы функция сохраняла оригинальную строку или резала её окончательно и бесповоротно как здесь?

Исправление grem, :

В DrWeb мы просили кандидата ДОМА! написать функцию trimRight, обрезавшую пробелы в конце строки.

Напугаю тебя таким вариантом (после прочтения пары глав K&R и урезания функции которая просто лишние пробелы выкидывает):

#include <stdio.h>

int trimRight (char *str);

int main()
{
    char str[256];

    printf("Enter string         :>>");
    int j = 0;  //j - счётчик номера символа в массиве

    while ((str[j] = getchar()) != '\n')  // чтение строки с пробелами
      ++j;
    str[j]='\0'; //добавление конца строки
    printf("Your init string     :>>%s<<\n", str);

    trimRight(str);
    printf("Your trimed-Right string:>>%s<<\n", str);

return 0;
}

int trimRight (char *str)
// Функция должна удаять пробелы в конце строки
{
int j = 0, ns=0; //, i = 0;
char *temp = str;

while (*(temp+j) != '\0') {
    if (*(temp+j) == ' ')
        ++ns; // счётчик пробелов

    if ((ns > 0) && (*(temp+j) != ' '))
        ns =0; // обнуление счётчика пробелов

    ++j; // переход к следующему символу в строке
    }
    // Отсекание лишних пробелов в конце строки
    if ((*(temp+j) == '\0') && (ns > 0))
        *(temp+j-ns)='\0';
return 0;
}

Только я не понял, желательно чтобы функция сохраняла оригинальную строку или резала её окончательно и бесповоротно как здесь?

Исходная версия grem, :

В DrWeb мы просили кандидата ДОМА! написать функцию trimRight, обрезавшую пробелы в конце строки.

Напугаю тебя таким вариантом (после прочтения пары глав K&R):

#include <stdio.h>

int trimRight (char *str);

int main()
{
    char str[256];

    printf("Enter string         :>>");
    int j = 0;  //j - счётчик номера символа в массиве

    while ((str[j] = getchar()) != '\n')  // чтение строки с пробелами
      ++j;
    str[j]='\0'; //добавление конца строки
    printf("Your init string     :>>%s<<\n", str);

    trimRight(str);
    printf("Your trimed-Right string:>>%s<<\n", str);

return 0;
}

int trimRight (char *str)
// Функция должна удаять пробелы в конце строки
{
int j = 0, ns=0; //, i = 0;
char *temp = str;

while (*(temp+j) != '\0') {
    if (*(temp+j) == ' ')
        ++ns; // счётчик пробелов

    if ((ns > 0) && (*(temp+j) != ' '))
        ns =0; // обнуление счётчика пробелов

    ++j; // переход к следующему символу в строке
    }
    // Отсекание лишних пробелов в конце строки
    if ((*(temp+j) == '\0') && (ns > 0))
        *(temp+j-ns)='\0';
return 0;
}

Только я не понял, желательно чтобы функция сохраняла оригинальную строку или резала её окончательно и бесповоротно как здесь?