1 Востаннє редагувалося Replace (11.12.2012 00:43:58)

Тема: Вказівники. Робота із рядками.

потрібно ввести стрічку "I have a small string".та замінити слово "small" на "very large".Моя програма замінює не цілком правильно, тобто з'їдається...допоможіть, будь ласка

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
char str[80];
char word1[50];
char word2[50];
char *p;
cout << "Vvedit strichky: ";
gets(str);
cout << "vvedit' shykane slovo\n";
gets(word1);
cout << "vvedit' inshe slovo\n";
gets(word2);
int k=strlen(word1);
p = str;
for(int i=0; i<strlen(str)-k;i++)
{
p=strstr(p, word1);
if(p==NULL)break;
for(int j=0;j<k;j++) *(p+j)=*(word2+j);
}

cout<<"Vasha strichka: ";
cout<<str << "\n";
return 0;
}

2

Re: Вказівники. Робота із рядками.

В тебе наскільки я зрозумів просто одне слово на інше і при цьому не враховується, що 1 слово менше за 2. Але код не перевіряв тому можу помилятись.

3

Re: Вказівники. Робота із рядками.

тобто, маєте на увазі. проблема у розмірностях самої стрічки?
вибачте, я просто не цілком зрозуміла

4

Re: Вказівники. Робота із рядками.

Так цикл в якому ви замінюєте слова повинен виконувватися стільки скільки і друге слово, тобто:
int k=strlen(word2);

Подякували: olena_sherstnyakova1

5

Re: Вказівники. Робота із рядками.

Вам за умоювою можна використовувати клас std::string, просто у вас програма ніби на с++, а ніби і на чистому сі. Якщо у вас немає ніяких обмежень то цю задачу можна вирішити набагато простіше. В любому випадку вам буде корисно переглянути цей сайт http://www.cplusplus.com/reference/string/string/

Подякували: olena_sherstnyakova1

6

Re: Вказівники. Робота із рядками.

таки ви були праві, int k=strlen(word2);
але воно далі їсть слова, тобто деякі літери, на жаль(

7

Re: Вказівники. Робота із рядками.

Ось робочий код без використання класу String

#include "stdafx.h"
#include<iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    char str[80];
    char word1[50];
    char word2[50];
    char result[130];
    char *p;
    cout << "Vvedit strichky: ";
    gets(str);
    cout << "vvedit' shykane slovo\n";
    gets(word1);
    cout << "vvedit' inshe slovo\n";
    gets(word2);    
    if((p = strstr(str, word1)) != NULL){
        char * start = str;
        int i = 0;
        while(start != p){
            result[i] = *start;
            start++;
            i++;
        }
        int k = strlen(word2);
        int j = 0;
        while(j < k){
            result[i] = word2[j];
            i++;
            j++;
        }
        start += strlen(word1);
        while(*start){
            result[i] = *start;
            start++;
            i++;
        }
        result[i] = '\0';
    }
    cout<<"Vasha strichka: ";
    cout<<result << "\n";
    for(;;){
    }
    return 0;
}
Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }
Подякували: olena_sherstnyakova1

8

Re: Вказівники. Робота із рядками.

чудовий)))спасибі))тілки без вказівників(
=)

9

Re: Вказівники. Робота із рядками.

вибачте, а в якому компіляторі ви це робите? в мене вибивають помилки..

10 Востаннє редагувалося Patron (10.12.2012 23:41:07)

Re: Вказівники. Робота із рядками.

я компілюю в Visual Studio 2010.

#include<iostream>
#include <stdio.h>

using namespace std;

int main(int argc, char * argv[])
{
    char str[80];
    char word1[50];
    char word2[50];
    char result[130];
    char *p;
    cout << "Vvedit strichky: ";
    gets(str);
    cout << "vvedit' shykane slovo\n";
    gets(word1);
    cout << "vvedit' inshe slovo\n";
    gets(word2);    
    if((p = strstr(str, word1)) != NULL){
        char * start = str;
        int i = 0;
        while(start != p){
            result[i] = *start;
            start++;
            i++;
        }
        int k = strlen(word2);
        int j = 0;
        while(j < k){
            result[i] = word2[j];
            i++;
            j++;
        }
        start += strlen(word1);
        while(*start){
            result[i] = *start;
            start++;
            i++;
        }
        result[i] = '\0';
    }
    cout<<"Vasha strichka: ";
    cout<<result << "\n";
    for(;;){
    }
    return 0;
}

Чому без вказівників? start i p - вказівники)

Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }
Подякували: olena_sherstnyakova1

11

Re: Вказівники. Робота із рядками.

а, ні, в вас є вказівники, це я не вам відповіла)
ве-ле-чез-не спасибі вам)

12

Re: Вказівники. Робота із рядками.

Правильно говорити рядки, а не стрічки.
В українській мові є слово стрічки, але воно використовується в зовсім іншому контексті.
Це так, невелелике зауваження.

13

Re: Вказівники. Робота із рядками.

Replace написав:

Правильно говорити рядки, а не стрічки.
В українській мові є слово стрічки, але воно використовується в зовсім іншому контексті.
Це так, невелелике зауваження.

Мені подобається слово "рядки" але як перекласти українською наприклад "string data" або "required type string"?

Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }

14

Re: Вказівники. Робота із рядками.

А в чому проблема?
1) рядкові дані або дані рядкового типу
2) необхідно рядковий тип

15 Востаннє редагувалося Patron (11.12.2012 09:35:12)

Re: Вказівники. Робота із рядками.

Пробема в тому що я ще й блогер то того всього і дуже часто незнав як написати такі словосполучення українською в українському реченні. Я маю на увазі що деякі речення англійською із технічними термінами з програмування дуже важко перекладати на українську. Наприклад:

The String class represents character strings.

- це що "Клас Рядок представляє символ рядки"?

Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }

16

Re: Вказівники. Робота із рядками.

Стрічка - це "лента" (tape).
Рядок - це "строка" (string).
Тому перше не можна використовувати в даному контексті..

17 Востаннє редагувалося bunyk (11.12.2012 14:42:52)

Re: Вказівники. Робота із рядками.

Раз вже тема з'їхала, то хто знає як перекласти "multirow string"? Багаторядковий рядок?

Подякували: Patron1

18

Re: Вказівники. Робота із рядками.

bunyk написав:

Раз вже тема з'їхала, то хто знає як перекласти "multirow string"? Багаторядковий рядок?

Я нерідко зустрічаю такі терміни у англомовній літературі і не знаю як їх взагалі можна правильно перекласти на українську. Це стосується не лише поняття "string".

Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }

19

Re: Вказівники. Робота із рядками.

Мені вже кілька місяців, як перестав подобатись термін "рядок". Хоча сам його застосовував. І саме через те, що рядок може складатися із кількох рядків. Якась тафтологія получається. Власне колись я вважав що String - це стрічка, згодом мене переконали, що String - це рядок. Якщо перекладати з російської то справді строка - рядок. Проте рядок англійською row або ж line.

"Стрічка" більш ближче до оригінального англійського терміну String (мотузка, струна і т.д.). Незнаю як бути із вищенаведеним tape. Проте "multirow string" можна тоді перекласти багаторядкова стрічка чи стрічка з кількома рядками.

Подякували: bunyk1

20 Востаннє редагувалося volodimirg (13.03.2013 13:03:44)

Re: Вказівники. Робота із рядками.

Перекладати, щоб було зрозуміло. Власне комп'ютерна термінологія в даний час доволі мінлива. І я вже не раз зустрічав ситуації, коли росіяни перекладали спочатку по одному. а через деякий час перекладали по іншому, оскільки їхній не дослівний переклад почав конфліктувати з новітнім дослівним перекладом. Власне аналогічна ситуація і в англійській мові:) МОжна зустріти книги англійською, де автори відстоюють свою термінологію, базуючись на своїх смаках, яка йде в супереч термінології розробників певної мови:).

"Стрічка" та "рядок" зустрічається багато де, в залежності від смаків того хто пише. Я навіть знайшов кілька підручників по програмуванню. Просто якось рядок, що складається з рядків це якось занадто. А слова типу малтірядковий рядок - це також надмірність і та ж сама тафтологія для тих хто знає іноземні мови, тоді вже краще багаторядоковий рядок чи многорядковий рядок, а не покручений англіцизм, чому тоді не малтіроу рядок чи взагалі малтіроу стрінг.

Взагалі я за те що книги потрібно писати і перекладати зрозумілою українською мовою без надмірних англіцизмів, щоб людина яка не знає англійської і новачок в чомусь, легко могла на інтуїтивному рівні розуміти про що йдеться.