ผลต่างระหว่างรุ่นของ "Psl/ตัวอย่างการเขียนพอยน์เตอร์กับสตริง"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
แถว 26: แถว 26:
 
   scanf("%s", buffer);
 
   scanf("%s", buffer);
 
   printf("%d\n", mystrlen(buffer));
 
   printf("%d\n", mystrlen(buffer));
 +
}
 +
</syntaxhighlight>
 +
 +
== การคัดลอกสตริง ==
 +
ในภาษาซี เรามีฟังก์ชัน <tt>strcpy</tt> สำหรับหาความยาวของสตริง ในตัวอย่างนี้ เราทดลองเขียนฟังก์ชันดังกล่าวโดยใช้พอยน์เตอร์  สังเกตว่าฟังก์ชัน <tt>mystrcpy</tt> นั้นคืนค่า pointer ของสตริงปลายทางมาด้วย  เราเขียนกรณีดังกล่าวเผื่อไว้สำหรับการใช้งานที่สะดวกขึ้น เช่น เราอาจจะสั่ง <tt>printf("%s\n", mystrcpy(dst,src));</tt> ได้เลย
 +
 +
<syntaxhighlight lang="cpp">
 +
#include <cstdio>
 +
 +
char* mystrcpy(char* dest, char* src)
 +
{
 +
  int l = 0;
 +
  char* sp = src;
 +
  char* dp = dest;
 +
 
 +
  while(*sp != '\0') {
 +
    *dp = *sp;
 +
    sp++;
 +
    dp++;
 +
  }
 +
  *dp = '\0';
 +
  return dest;
 +
}
 +
 +
char buffer[1000];
 +
char outbuffer[1000];
 +
 +
main()
 +
{
 +
  scanf("%s", buffer);
 +
  mystrcpy(outbuffer, buffer);
 +
  printf("%s\n", outbuffer);
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>

รุ่นแก้ไขเมื่อ 21:26, 17 มกราคม 2558

หน้านี้รวมตัวอย่างการเขียนพอยน์เตอร์กับสตริง

สตริงในภาษาซีเก็บเป็นอาร์เรย์ของ char โดยมีอักขระหมายเลข 0 เป็นตัวปิดท้าย (null-terminated string) ในหลาย ๆ กรณีเราสามารถจัดการสตริงได้สะดวกด้วยพอยน์เตอร์

การหาความยาว

ในภาษาซี เรามีฟังก์ชัน strlen สำหรับหาความยาวของสตริง ในตัวอย่างนี้ เราทดลองเขียนฟังก์ชันดังกล่าวโดยใช้พอยน์เตอร์

#include <cstdio>

int mystrlen(char* st)
{
  int l = 0;
  char* p = st;
  while(*p != '\0') {
    p++;
    l++;
  }
  return l;
}

char buffer[1000];

main()
{
  scanf("%s", buffer);
  printf("%d\n", mystrlen(buffer));
}

การคัดลอกสตริง

ในภาษาซี เรามีฟังก์ชัน strcpy สำหรับหาความยาวของสตริง ในตัวอย่างนี้ เราทดลองเขียนฟังก์ชันดังกล่าวโดยใช้พอยน์เตอร์ สังเกตว่าฟังก์ชัน mystrcpy นั้นคืนค่า pointer ของสตริงปลายทางมาด้วย เราเขียนกรณีดังกล่าวเผื่อไว้สำหรับการใช้งานที่สะดวกขึ้น เช่น เราอาจจะสั่ง printf("%s\n", mystrcpy(dst,src)); ได้เลย

#include <cstdio>

char* mystrcpy(char* dest, char* src)
{
  int l = 0;
  char* sp = src;
  char* dp = dest;
  
  while(*sp != '\0') {
    *dp = *sp;
    sp++;
    dp++;
  }
  *dp = '\0';
  return dest;
}

char buffer[1000];
char outbuffer[1000];

main()
{
  scanf("%s", buffer);
  mystrcpy(outbuffer, buffer);
  printf("%s\n", outbuffer);
}