1 Востаннє редагувалося Replace (10.12.2012 23: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;
}
Подякували: olena_sherstnyakova1

8

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

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

9

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

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

10 Востаннє редагувалося Patron (10.12.2012 22: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 - вказівники)

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

11

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

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

12

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

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

13

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

Replace написав:

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

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

14

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

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

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

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

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

The String class represents character strings.

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

16

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

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

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

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

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

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

18

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

bunyk написав:

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

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

19

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

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

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

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

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

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

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

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

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