Error C language - c

This code cannot convert char* to char**. I don't know what it means.
Here is my code:
#include <stdio.h>
#include <conio.h>
#include <string.h>
shift( char *s[] , int k )
{
int i,j;
char temp[50];
for( i = 0 ; i < k ; i++ )
temp[i]=*s[i] ;
for( j = 0 ; j < strlen(*s) ; j++ )
{
*s[j] = *s[k] ;
k++ ;
}
strcpy(*s,temp);
}
main()
{
int i,j=0,k;
char s[30];
printf("please enter first name ");
gets(s);
scanf("%d",&k);
shift( &s , k);
puts(s);
getch();
}
The program is supposed to:
read string S1 and index ‘K’, then call your own function that rotates the string around
the entered index. The output of your program should be as follows:
Enter your string: AB3CD55RTYU
Enter the index of the element that rotates the string around: 4
The entered string: AB3CD55RTYU
Enter the element that rotates the string around: D
The rotated string is : D55RTYUAB3C

&s means char (*)[30](pointer to array of char[30]) not char *[] (array of pointer to char)
For example, It modified as follows.
#include <stdio.h>
#include <conio.h>
#include <string.h>
void shift(char s[],int k){
int i, len;
char temp[50];
for(i=0;i<k;i++)
temp[i]=s[i];
temp[i] = '\0';
len = strlen(s);
for(i=0;k<len;i++)
s[i]=s[k++];
strcpy(&s[i],temp);
}
int main(){
int k;
char s[30];
printf("please enter first name ");
gets(s);
scanf("%d", &k);
shift(s , k);
puts(s);
getch();
return 0;
}

example using a structure(Copy is performed). However, this is waste of resources.
#include <stdio.h>
#include <conio.h>
typedef struct word {
char str[30];
} Word;
Word shift(Word word, int k){
Word temp;
int i = 0, j;
for(j=k;word.str[j]!='\0';++j)
temp.str[i++]=word.str[j];
for(j=0;j<k;++j)
temp.str[i++]=word.str[j];
temp.str[i] = '\0';
return temp;
}
int main(){
int k;
Word w;
printf("please enter first name ");
gets(w.str);
scanf("%d", &k);
w=shift(w , k);
puts(w.str);
getch();
return 0;
}

shift(char* s[],int k); //shift expects char**; remember s[] is actually a pointer
main()
{
char s[30]; // when you declare it like this s is a pointer.
...
shift(s , k);
}
You should change the shift function signature to shift(char* s,int k); since you don't really need pointer to pointer. You just need to pass the beginning of the array.

Related

Function in C that counts how many times a character read appears in a string

I'm using CodeBlocks and C as a programming language. I need to make a function that counts how many times a character read appears in a string (also read).
Line 8 error: subscripted value is neither array nor pointer nor vector
#include<stdio.h>
#include<string.h>
int find(char s, char ch, int l)
{
int i, j=0;
for(i=0; i<l; i++)
{
if(strcmp(s[i],ch)==0)
j++;
}
return j;
}
int main()
{
char s[30];
int i,j,l;
char ch;
printf("Enter the string: ");
gets(s);
l = strlen(s)+1;
printf("Enter the character: ");
scanf("%c",&ch);
j=find(s, ch, l);
printf("\n%c occurs %d times",ch,j);
return 0;
}
Your error was that in the function declaration you didn't mention that s was an array. You needed to use s[] and there was no need for strcmp function in the if statement.
#include<stdio.h>
#include<string.h>
int find(char s[], char ch, int l)
{
int i, j=0;
for(i=0; i<l; i++)
{
if(s[i] == ch)
j++;
}
return j;
}
int main()
{
char s[30];
int i,j,l;
char ch;
printf("Enter the string: ");
gets(s);
l = strlen(s)+1;
printf("Enter the character: ");
scanf("%c",&ch);
j=find(s, ch, l);
printf("\n%c occurs %d times",ch,j);
return 0;
}

Finding all suffix starting with a character X

I need to find all suffix starting with a character X. For example, for int suffix (char str [], char c) when the word is ababcd and the letter b it should return:
babcd
bcd
and the number 2.
This is my code:
#include <stdio.h>
#include <string.h>
int main()
{
char c;
char str[128];
int counter=0;
printf ("Please enter charachter and a string \n");
scanf("%c %s",&c,str);
counter = my_suffix(str,c);
printf("The string has %d suffix \n",counter);
return 0;
}
int my_suffix(char str[],char c) {
int counter = 0;
for (int i=0; i < strlen(str); i++)
{
if (str[i] == c)
{ puts(str+i);
counter++;
}
}
return counter;
}
I couldn't find why it's not running,
Thanks!
Your code is fine you should just written following method above int main()
int my_suffix(char str[],char c){...}

How To Get The Variables of Equation

I'm creating a program in C that need to print the variables of any equation, given by the user. For example, if the user digits the string (vector of char): "2x + 3y + 4z = -8", it has to print: "the variables are: x, y and z". How can I print these variables (letters)?
This is my actual CODE:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAXCHAR 1000
int main() {
char str[MAXCHAR];
int var = 0;
char *cp;
char *receivecp;
char *variables;
char *p;
int numberOfEquations = 0;
printf("Enter the equation: ");
gets(str);
printf("Equation's variables: ");
for(cp=str; *cp; ++cp)
if(isalpha(*cp)) //is letter
{
printf("%c", *cp, "\n"); //print letter
}
return 0;
}

C ascii to hex code

I need to convert an ascii input to hex input. I am very bad with C so if you could include some explanation that would be very helpful. This code is just a bunch of bits and pieces but most is probably wrong or useless. Afterwards i need to use user input to select the string but the hard part is getting it to convert at all.
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
void crypt(char *buf, char *keybuf, int keylen) {
//This is meant to encrypt by xor-ing with the sentence and key entered//
//It is also supposed to replace the original buf with the new version post-xor//
int i;
int *xp;
xp=&i;
for(i=0; i<keylen; i++) {
buf[i]=buf[i]^keybuf[i];
xp++;
}
}
int convertkey(char *keybuf) {
int keylen=0;
//I need to add something that will return the length of the key by incrementing keylen according to *keybuf//
return keylen;
}
int main(int argc, char * argv[]){
char x;
char *xp;
xp = &x;
char a[47];
char *ap;
ap=a;
printf("Enter Sentence: ");
scanf("%[^\n]",a);
printf("Enter key: ");
scanf("%d",xp);
printf("You entered the sentence: %s\n",a);
printf("You entered the key: %d\n",x);
convertkey(xp);
crypt(ap,xp,x);
printf("New Sentence: %s\n",a);
return 0;
}
Such as it is, I have reorganised your posted code so at least it compiles, even if the intent is unclear. Perhaps you can take it on from here.
#include <stdio.h>
#include <stdlib.h>
// moved out of main()
void crypt(char *buf, char *keybuf, int keylen) {
int i; // added declaration
for(i=0; i<keylen; i++) { // corrected syntax and end condition
buf[i]=buf[i]^keybuf[i];
//xp++; // out of scope
}
}
// moved out of main()
int convertkey(char *keybuf) {
int keylen=0;
return keylen;
}
int main(int argc, char * argv[]){
int x=0;
int *xp;
xp = &x; // xp=&x{0};
return 0; // exit(0);
}
This is the final product I was looking for but was very poor at explaining/coding.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void crypt(char *buf, char *keybuf, int keylen) {
int i;
int length= strlen(buf)-1;
for(i=0; i<length; i++) {
buf[i]=buf[i]^keybuf[i%keylen];
printf("%c",buf[i]);
}
printf("\n");
}
int convertkey(char *keybuf) {
int i=0;
for(i=0;keybuf[i]!='\n';i++){
if(keybuf[i]>='0' & keybuf[i]<='9'){
keybuf[i]=keybuf[i]-'0';
}
else if(keybuf[i]>='a' & keybuf[i]<='f'){
keybuf[i]=(keybuf[i]-'a')+10;
}
}
return i;
}
int main(int argc, char * argv[]){
char keychars[12];
char a[48];
char *ap;
int i;
ap=a;
printf("Enter Sentence: ");
fgets(a, 48, stdin);
printf("Enter Key: ");
fgets(keychars, 12, stdin);
for (i=0; i<strlen(keychars); i++) {
char c = keychars[i];
printf("keychars[%d]=%c (character), %d (decimal), %x (hex)\n", i, c, c, c);
}
crypt(ap,keychars,convertkey(keychars));
return 0;
}

Recursive generation of letters combinations string

I'm trying to write a recursive program that makes/prints a string with each of all the possible combinations of vowels(A, E, I, O, U), that includes at least once every vowel. The number of elements is taken as input from the user (so to include each vowel at least once >=5). I really can't figure out the right way to do this.
Here's my take on it (not working though):
#include <stdio.h>
#include <stdlib.h>
int voc_gen(int n, char *array);
char rand_voc();
int main()
{
char *array, voc[] = "AEIOU";
int i, N;
printf("Insert number of elements for vocals string:\n");
scanf("%d", &N);
array = malloc(N * sizeof(char));
for(i=0; i<5; i++)
array[i] = voc[i];
voc_gen(N-5, array);
return 0;
}
int voc_gen(int n, char *array){
if(n==0)
return 0;
else{
array[voc_gen(n, array)] = rand_voc();
printf("%s\n", array);
return voc_gen(n-1, array);
}
}
char rand_voc(){
char array[] = "AEIOU";
int i;
return array[rand()%5];
}

Resources