तर्क
दिए गए स्ट्रिंग से स्वरों (a, e, i, o, u - छोटे और बड़े दोनों) को हटाने का एल्गोरिदम:
for (i = 0; i < len; i++) {
if (str[i] है स्वर) {
// वर्तमान स्थिति से सभी अक्षरों को एक स्थान बाएं शिफ्ट करें
for (j = i; j < len; j++) {
str[j] = str[j + 1];
}
len--; // लंबाई घटाएं क्योंकि एक अक्षर हटाया गया
}
}
प्रोग्राम
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
int len, i, j;
printf("कोई स्ट्रिंग दर्ज करें: ");
fgets(str, sizeof(str), stdin);
// fgets नई पंक्ति शामिल कर सकता है, उसे हटाएं
len = strlen(str);
if (len > 0 && str[len - 1] == '\n') {
str[len - 1] = '\0';
len--;
}
for (i = 0; i < len; i++) {
char ch = str[i];
// स्वर जांचें (छोटे और बड़े दोनों)
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' ||
ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U') {
// अक्षरों को बाएं शिफ्ट करें
for (j = i; j < len; j++) {
str[j] = str[j + 1];
}
len--;
i--; // इसी स्थान पर फिर से जांचें (क्योंकि नया अक्षर आ गया)
}
}
printf("स्वर हटाने के बाद स्ट्रिंग: %s\n", str);
return 0;
}
आउटपुट
कोई स्ट्रिंग दर्ज करें: TutorialsPoint
स्वर हटाने के बाद स्ट्रिंग: TtrlsPnt
चरण-दर-चरण ट्रेस (TutorialsPoint के लिए)
| चरण | इंडेक्स | अक्षर | कार्रवाई | स्ट्रिंग |
|---|---|---|---|---|
| 1 | 0 | T | स्वर नहीं | TutorialsPoint |
| 2 | 1 | u | स्वर! शिफ्ट करें | TtorialsPoint |
| 3 | 1 | t | स्वर नहीं (पुनः जांच) | TtorialsPoint |
| 4 | 2 | o | स्वर! शिफ्ट करें | TtrialsPoint |
| 5 | 2 | r | स्वर नहीं | TtrialsPoint |
| ... | ... | ... | ... | ... |
| अंतिम | - | - | - | TtrlsPnt |
सुधारित संस्करण: नई स्ट्रिंग बनाकर (अधिक कुशल)
#include <stdio.h>
#include <string.h>
int isVowel(char ch) {
ch = tolower(ch);
return (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u');
}
int main() {
char str[100], result[100];
int i, j = 0;
printf("स्ट्रिंग दर्ज करें: ");
fgets(str, sizeof(str), stdin);
str[strcspn(str, "\n")] = '\0'; // नई पंक्ति हटाएं
for (i = 0; str[i] != '\0'; i++) {
if (!isVowel(str[i])) {
result[j++] = str[i];
}
}
result[j] = '\0';
printf("स्वर हटाने के बाद: %s\n", result);
return 0;
}
लाभ
- O(n) समय जटिलता (पिछला O(n²))
- मूल स्ट्रिंग अपरिवर्तित रहती है
- पढ़ने और समझने में आसान
tolower()का उपयोग करके केस-इनसेंसिटिव जांच
सी लाइब्रेरी फ़ंक्शन विकल्प
C में स्वर हटाने के लिए कोई अंतर्निहित फ़ंक्शन नहीं है, लेकिन आप बना सकते हैं:
char* removeVowels(char *dest, const char *src) {
int j = 0;
for (int i = 0; src[i]; i++) {
char ch = tolower(src[i]);
if (ch != 'a' && ch != 'e' && ch != 'i' && ch != 'o' && ch != 'u') {
dest[j++] = src[i];
}
}
dest[j] = '\0';
return dest;
}