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

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
แถว 87: แถว 87:
 
   scanf("%s", buffer);
 
   scanf("%s", buffer);
 
   atoz(buffer);
 
   atoz(buffer);
 +
  printf("%s\n", buffer);
 +
}
 +
</syntaxhighlight>
 +
 +
== ขยับ (เปลี่ยน a เป็น b, b เป็น c,...) ==
 +
 +
<syntaxhighlight lang="cpp">
 +
#include <cstdio>
 +
 +
char* nextchar(char* st)
 +
{
 +
  char* p = st;
 +
  while(*p != '\0') {
 +
    *p = (*p) + 1;
 +
    p++;
 +
  }
 +
  return st;
 +
}
 +
 +
char buffer[1000];
 +
 +
main()
 +
{
 +
  scanf("%s", buffer);
 +
  nextchar(buffer);
 
   printf("%s\n", buffer);
 
   printf("%s\n", buffer);
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>

รุ่นแก้ไขเมื่อ 21:34, 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 สำหรับหาความยาวของสตริง ในตัวอย่างนี้ เราทดลองเขียนฟังก์ชันดังกล่าวโดยใช้พอยน์เตอร์

สังเกตว่า

  • เราต้องสั่ง *dp = '\0'; ในตอนท้ายด้วย เพื่อปิดสตริง
  • ฟังก์ชัน mystrcpy นั้นคืนค่า pointer ของสตริงปลายทางมาด้วย เราเขียนกรณีดังกล่าวเผื่อไว้สำหรับการใช้งานที่สะดวกขึ้น เช่น เราอาจจะสั่ง printf("%s\n", mystrcpy(dst,src)); ได้เลย
#include <cstdio>

char* mystrcpy(char* dest, char* src)
{
  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);
}

เปลี่ยน a เป็น z

#include <cstdio>

char* atoz(char* st)
{
  char* p = st;
  while(*p != '\0') {
    if(*p == 'a')
      *p = 'z';
    p++;
  }
  return st;
}

char buffer[1000];

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

ขยับ (เปลี่ยน a เป็น b, b เป็น c,...)

#include <cstdio>

char* nextchar(char* st)
{
  char* p = st;
  while(*p != '\0') {
    *p = (*p) + 1;
    p++;
  }
  return st;
}

char buffer[1000];

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